spring-boot 3.0 Discord OAuth2

问题描述 投票:0回答:2

我想为我的网站进行 Discord OAuth2 登录。

我在 GitHub 上找到了旧 Spring 版本的以下代码https://github.com/fourscouts/blog/tree/master/oauth2-discord 由于新的 spring 版本,我必须在配置中添加 SecurityFilterChain。我现在的问题是,当我访问 http://localhost:8080/login 时,我可以访问 Discord 登录页面,但是当我从 Discord 重定向时,我会看到错误消息,您可以在图片中看到。 Error after Discord redirect 我还在控制台中收到以下消息:

Response 400 BAD_REQUEST No event was found for the exception org.springframework.security.oauth2.core.OAuth2AuthenticationException
我不知道下一步应该尝试什么。 我已将代码上传到 github,以便您查看:https://github.com/mrmrmystery/somewhatweb

spring spring-boot spring-security discord
2个回答
0
投票

在 Spring 中,我通过 application.properties 中的以下配置完成了此任务

# OAuth2 Discord Registration
spring.security.oauth2.client.registration.discord.provider=discord
spring.security.oauth2.client.registration.discord.client-id=CLIENT_ID
spring.security.oauth2.client.registration.discord.client-secret=SECRET
spring.security.oauth2.client.registration.discord.client-authentication-method=post
spring.security.oauth2.client.registration.discord.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.discord.scope[0]=identify
spring.security.oauth2.client.registration.discord.redirect-uri=http://localhost:8080/login/oauth2/code/discord

# OAuth2 Sign-In-With-Discord
spring.security.oauth2.client.provider.discord.authorization-uri=https://discordapp.com/api/oauth2/authorize
spring.security.oauth2.client.provider.discord.token-uri=https://discordapp.com/api/oauth2/token
spring.security.oauth2.client.provider.discord.user-info-uri=https://discordapp.com/api/users/@me
spring.security.oauth2.client.provider.discord.user-name-attribute=username


0
投票

您能解决 Discord Login 的问题吗?

您可能需要

public class OAuth2AuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler
同时您可以使用其他 SuccessHandler 来扩展它。

然后,在这个 SuccessHandler 内部,您可以从基类实现 onAuthenticationSuccess 方法。

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
            Authentication authentication) throws IOException, ServletException {

然后你可以像这样在你的filterChain中设置它:

        .oauth2Login(oauth2login -> {
          oauth2login.successHandler(successHandler);
        })
© www.soinside.com 2019 - 2024. All rights reserved.