【问题标题】:Spring Boot OAuth2 when implicit JWT is created?创建隐式JWT时的Spring Boot OAuth2?
【发布时间】:2018-12-22 00:18:37
【问题描述】:

如何从 OAuth2 SSO Principal 获取详细信息到我的 JWT? (OAuth2AuthenticationgetDetails 的实例为OAuth2AuthenticationDetailsgetDecodedDetails 返回null

我有……

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

  • 身份验证服务器配置为 acmeimplicit 和 SSO 的 GitHub 客户端

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

当我登录时...

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

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

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

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

[更新 #1]

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

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

【问题讨论】:

    标签: spring spring-boot spring-security spring-security-oauth2 spring-lemon


    【解决方案1】:

    Spring Lemon 这样做的方式是替换 OAuth2 和 OpenID 连接用户服务(请参阅spring security docs)。有关详细信息,请参阅 LemonOAuth2UserServiceLemonOidcUserService。对于无状态,它将客户端一个短暂的 JWT 令牌作为参数传递给 targetUrl,如您在其 OAuth2AuthenticationSuccessHandler 类中所见。它使用一些 cookie 机制来无状态地完成所有这些工作,可以通过查看其 HttpCookieOAuth2AuthorizationRequestRepository 及其配置方式来进一步理解。

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

    【讨论】:

      猜你喜欢
      • 2020-10-25
      • 2017-06-02
      • 2020-06-19
      • 2023-03-18
      • 2019-02-10
      • 2017-01-31
      • 2018-01-05
      • 2022-12-02
      • 2018-10-29
      相关资源
      最近更新 更多