簡體   English   中英

分離OAuth2授權服務器和資源服務器

[英]Separating OAuth2 Authorization Server and Resource Server

我實現了OAuth2授權服務器和資源服務器。

而且有很多文件告訴我“授權服務器和資源服務器可以分開還是不能分開”

我喜歡MSA,所以我決定分離這些服務器。

我在Internet上看到許多有關此問題的文檔,但實際上我無法繼續進行。

我正在使用SpringBoot2。

  • 腳本
    1. 用戶已連接到我的Client應用程序。
    2. 請求到受保護的端點/client/me
    3. Client控制器中,如果用戶尚未通過身份驗證,則重定向到Authorization Server的登錄端點/auth/oauth/authorize
    4. 如果用戶首先進入我的Client應用程序,則用戶將在我的Authorization Server進行注冊(而非登錄)。
    5. Authorization Server的注冊頁面中,用戶將輸入其usernamerealusernamepasswordemail
    6. 用戶的帳戶已發行,用戶將通過我的Authorization Server的登錄表單登錄。
    7. 如果登錄成功,則Client將請求具有access-token Resource Server/me端點,並且映射為/me Resource Server的Controller將返回PrincipalAuthentication Object作為REST API。
    8. Client會將REST API的結果綁定到我的SecurityContext DefaultOAuth2UserCustomOAuth2User中。

這是問題。

據我所知, Resource Server/me端點將提供用戶的資源。 例如,真實姓名或電子郵件等。

但是用戶已在Authorization Server ,因此所有信息都保存在Authorization Server的數據庫中。

我的oauth2服務器是MSA。 因此數據庫也已分離。

那么,如何才能設置emailrealname ,以PrincipalAuthenticationCustomOAuth2User通過對象Resource Server/me終點?

Authorization Server負責對用戶或客戶端(其他應用程序)進行身份驗證,檢查他們是否有權執行他們想做的事情,並在成功后發布令牌。 這意味着它連接到的數據庫應具有所有用戶憑據,客戶端ID,客戶端機密,角色以及其他有助於身份驗證和授權的相關信息。

Resource Server負責處理來自前端的所有請求,無論是經過身份驗證的請求還是打開的請求(不需要身份驗證)。 它所連接的數據庫應該具有與身份驗證無關的信息,例如用戶的性別,身高,體重,愛好等。

要回答您的問題,您可以在Resource Server中創建公開注冊和其他功能的控制器。 然后,該服務器將調用授權服務器。 對於注冊,Resource Server將憑據傳遞給Auth Server,以查看是否已經聲明了用戶名,如果尚未注冊用戶,則根據Auth Server的響應,Resource Server將繼續進行用戶注冊。 對於登錄,前端可以直接調用Auth Server以獲得令牌。

對於隨后所有對受保護資源(帶有訪問令牌)的調用,資源服務器都需要調用Auth Server來驗證令牌。 為此,Spring提供了CheckTokenEndpoint/oauth/check_token )。

您還可以檢查OAuth2RestTemplate 可以在Resource Server中用於向Auth Server發出REST請求。 請注意,資源服務器(或您具有前端功能的任何其他內部應用程序)將是Auth Server的客戶端。 他們還需要進行身份驗證和授權。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM