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 将使用代码和状态参数重定向回 localhost: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 社交登录和本地 OAuth2-Server