Spring Boot OAuth 2:登录后匿名用户

Posted

技术标签:

【中文标题】Spring Boot OAuth 2:登录后匿名用户【英文标题】:Spring Boot OAuth 2: Anonymous user after login 【发布时间】:2019-05-14 19:22:31 【问题描述】:

我尝试使用 Spring Boot 2 创建 OAuth 2 客户端。但即使是最简单的官方示例也无法正常工作,因为我的用户未通过身份验证并进入登录循环。

我克隆了第一个官方 Spring Boot OAuth 2 示例:https://github.com/spring-guides/tut-spring-boot-oauth2/tree/master/simple

其目标是通过外部 OAuth 身份验证服务器(在示例中为 Facebook)对用户进行身份验证。我唯一改变的是使用 Github 而不是 Facebook。

在有效的 Github 身份验证并允许客户端使用 Github 的资源后,Github 将使用代码和状态参数重定向回 l​​ocalhost:8080。但是客户端正在记录:

Access is denied (user is anonymous); redirecting to authentication entry point

之后,登录循环开始:客户端软件重定向回 Github,Github 重定向回客户端软件。

任何想法为什么 Spring Boot 客户端软件在 Github 中验证后无法正确验证?

应用类:

@SpringBootApplication
@EnableOAuth2Sso
public class SocialApplication 
    public static void main(String[] args) 
        SpringApplication.run(SocialApplication.class, args);
    

application.yml:

security:
  oauth2:
    client:
      clientId: (find it in the tutorial)
      clientSecret: (find it in the tutorial)
      accessTokenUri: https://github.com/login/oauth/access_token
      userAuthorizationUri: https://github.com/login/oauth/authorize
      clientAuthenticationScheme: form
    resource:
      userInfoUri: https://api.github.com/user

logging:
  level:
    org.springframework.security: DEBUG
    org.springframework.web: DEBUG

【问题讨论】:

好吧,它并不能解决 Github 的问题,但我找到了一个使用我自己的身份验证服务器的工作示例:Simple SSO with OAuth2 【参考方案1】:

当您进行身份验证的服务提供商配置了与您来自的相同重定向 URI 时,可能会导致登录循环。

相反,您应该将其配置为重定向到 /login/oauth/code,因为授权服务会将您重定向到带有访问令牌的 uri,这样您就可以作为经过身份验证的用户访问资源。 (如果我的解释有误,请纠正我,我仍在学习了解 OAuth 的工作原理)

有关更多详细信息,请查看 RFC 规范中的协议流:https://www.rfc-editor.org/rfc/rfc6749#section-1.2

【讨论】:

以上是关于Spring Boot OAuth 2:登录后匿名用户的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Boot 中成功 Oauth2 登录后 Cookie 身份验证而不是 JWT Bearer Token

Spring Boot:Oauth2:访问被拒绝(用户是匿名的);重定向到身份验证入口点

Spring boot OAuth成功登录侦听器未触发

Spring Boot 社交登录和本地 OAuth2-Server

Spring Boot 和 OAuth2 社交登录,无法获取 refreshToken

Spring Boot社交登录和本地OAuth2-Server