繁体   English   中英

创建隐式JWT时,Spring Boot OAuth2是否启动?

[英]Spring Boot OAuth2 when implicit JWT is created?

如何从OAuth2 SSO Principal获取详细信息到我的JWT中? OAuth2Authentication getDetails实例为OAuth2AuthenticationDetails getDecodedDetails返回null

我有...

  • 带有隐式登录作为acme客户端的Angular 6客户端(使用angular-oauth2-oidc
  • 具有JWT TokenService配置的Spring Boot OAuth2授权服务器,带有到GitHub的第三方SSO

  • 身份验证服务器使用acme配置为implicit而GitHub客户端配置为SSO

  • /login/github验证服务器公开/login/github
  • 身份验证服务器公开一个/me (受ResourceServer配置保护)

当我登录...

  1. Angular应用重定向到身份验证服务登录
  2. 身份验证服务重定向到GitHub
  3. [用户验证]
  4. GitHub重定向到Auth Service
  5. 身份验证服务启动会话并发出令牌
  6. 身份验证服务重定向到Angular
  7. 浏览器令牌是正确的JWT

现在,当我与Auth Service /me通信时:

  • 直接,我从GitHub获得了一个包含所有详细信息的Principal (是)
  • 间接从Angular应用程序通过Authorization: Bearer ...标头传递令牌,我得到了一个Principal ,其中包含acme客户端(ugh)的最少OAuth客户端信息

我尝试了自定义TokenEnhancer ,但是OAuth2Authentication实例已经是最基本的没有详细信息的实例。 而且,当从Angular发起调用时,它没有与直接调用时相同的会话cookie(我不想共享会话-我想将详细信息放在JWT中)。

[更新#1]

我尝试了一个自定义的JwtAccessTokenConverter并在@EnableAuthorizationServer@EnableResourceServer (确保/me端点)配置类中都使用了它。 但是它没有用。 我仍然从OAuth2Authentication获得空详细信息。

final JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setAccessTokenConverter(new CustomTokenConverter());

Spring Lemon这样做的方式是替换OAuth2和OpenID连接用户服务(请参阅spring安全文档 )。 有关详细信息,请参见LemonOAuth2UserServiceLemonOidcUserService 为了实现无状态,它会向客户端传递一个短暂的JWT令牌作为targetUrl的参数,如您在OAuth2AuthenticationSuccessHandler类中OAuth2AuthenticationSuccessHandler 它使用某种cookie机制来无状态地进行所有操作,通过查看其HttpCookieOAuth2AuthorizationRequestRepository及其配置,可以进一步理解。

这是一篇更详细的说明文章: https : //www.naturalprogrammer.com/blog/1681261/spring-security-5-oauth2-login-signup-stateless-restful-web-services

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM