Spring 在创建隐式 JWT 时启动 OAuth2?

Spring Boot OAuth2 when implicit JWT is created?

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

我有...

当我登录时...

  1. Angular 应用程序重定向到 Auth 服务登录
  2. 授权服务重定向到 GitHub
  3. [用户验证]
  4. GitHub 重定向到 Auth 服务
  5. Auth 服务启动 session 并颁发令牌
  6. Auth 服务重定向到 Angular
  7. 浏览器令牌是正确的 JWT

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

我试过自定义 TokenEnhancer,但 OAuth2Authentication 实例已经是最低限度的,没有任何细节。而且,当调用从 Angular 发起时,它没有与我直接调用它时相同的 session cookie(我不想共享 session - 我想将详细信息放在 JWT 中)。

[更新 #1]

我尝试了自定义 JwtAccessTokenConverter 并在 @EnableAuthorizationServer@EnableResourceServer(保护 /me 端点)配置中使用了它 类。但是它没有用。我仍然从 OAuth2Authentication.

获得空详细信息
final JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setAccessTokenConverter(new CustomTokenConverter());

方式Spring Lemon does this is replacing the OAuth2 and OpenID connect user services (see spring security docs)。有关详细信息,请参阅 LemonOAuth2UserServiceLemonOidcUserService。对于无状态,它将客户端一个短暂的 JWT 令牌作为参数传递给 targetUrl,如您在其 OAuth2AuthenticationSuccessHandler class 中所见。它使用一些 cookie 机制来无状态地执行所有这些操作,可以通过查看它的 HttpCookieOAuth2AuthorizationRequestRepository 及其配置方式来进一步理解。

这里有一篇文章对此进行了更详细的解释:https://www.naturalprogrammer.com/blog/1681261/spring-security-5-oauth2-login-signup-stateless-restful-web-services