[英]Separating OAuth2 Authorization Server and Resource Server
我實現了OAuth2授權服務器和資源服務器。
而且有很多文件告訴我“授權服務器和資源服務器可以分開還是不能分開”
我喜歡MSA,所以我決定分離這些服務器。
我在Internet上看到許多有關此問題的文檔,但實際上我無法繼續進行。
我正在使用SpringBoot2。
Client
應用程序。 /client/me
Client
控制器中,如果用戶尚未通過身份驗證,則重定向到Authorization Server
的登錄端點/auth/oauth/authorize
。 Client
應用程序,則用戶將在我的Authorization Server
進行注冊(而非登錄)。 Authorization Server
的注冊頁面中,用戶將輸入其username
, realusername
, password
和email
。 Authorization Server
的登錄表單登錄。 Client
將請求具有access-token
Resource Server
的/me
端點,並且映射為/me
Resource Server
的Controller將返回Principal
或Authentication
Object作為REST API。 Client
會將REST API的結果綁定到我的SecurityContext
DefaultOAuth2User
或CustomOAuth2User
中。 這是問題。
據我所知, Resource Server
的/me
端點將提供用戶的資源。 例如,真實姓名或電子郵件等。
但是用戶已在Authorization Server
,因此所有信息都保存在Authorization Server
的數據庫中。
我的oauth2服務器是MSA。 因此數據庫也已分離。
那么,如何才能設置email
或realname
,以Principal
或Authentication
或CustomOAuth2User
通過對象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.