【发布时间】: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身份验证服务器配置为
acme为implicit和 SSO 的 GitHub 客户端- 身份验证服务器公开
/login/github - 身份验证服务器公开
/me(受ResourceServer 配置保护)
当我登录时...
- Angular 应用重定向到 Auth 服务登录
- 身份验证服务重定向到 GitHub
- [用户验证]
- GitHub 重定向到身份验证服务
- Auth Service 启动会话并颁发令牌
- 身份验证服务重定向到 Angular
- 浏览器令牌是正确的 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