簡體   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