[英]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配置保護) 當我登錄...
現在,當我與Auth Service /me
通信時:
Principal
(是) 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安全文檔 )。 有關詳細信息,請參見LemonOAuth2UserService
和LemonOidcUserService
。 為了實現無狀態,它會向客戶端傳遞一個短暫的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.