OAuth2AuthenticationProcessingFilter資源認證服務器過濾器


資源服務器如何認證訪問身份?

一般會傳入access_token,那資源認證服務器是如何解析令牌以及如何與資源認證服務器的token庫進行對比的?
核心代碼在org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter#doFilter

Debug驗證:

1、先用密碼模式生成一個訪問的access_token

 

 

 2、然后用postman進行資源請求:

 

 

 3、進入斷點

 

 

                              圖1 

 

(1):根據tokenExtractor的extract方法獲取請求攜帶的token信息

    方法:org.springframework.security.oauth2.provider.authentication.BearerTokenExtractor#extractHeaderToken

 

 

 經過:org.springframework.security.oauth2.provider.authentication.BearerTokenExtractor#extract

將token封裝成

PreAuthenticatedAuthenticationToken

 

 

 

這里可以看到PreAuthenticationAuthenticationToken是Authentication的子類,回到圖1的第一步,返回authentication對象

(2)、驗證authenticaion

圖1的第二步,進入斷點

 

 

 

 

 

 從服務端的token存儲位置取出OAuth2AccessToken對象,這里tokenStore.readAccessToken(accessTokenValue)方法是核心,點進去看-》

 

 

 就是從accessTokenStore中獲取的。

此時權限信息已經通過token取到,繼續往下驗證

 

 

 

checkClientDetails(auth)方法

 

 

 驗證當前登錄用戶的scope屬性是否符合所請求的資源所需的權限要求,如果不滿足,拋出

Invalid token contains disallowed scope (" + scope + ") for this client

通過驗證后,將身份認證信息返回,第二步結束

(3):將身份信息綁定到SecurityContextHolder
這步沒什么好說的,進入斷點就是

 

 將身份信息設置到上下文的authentication屬性中。

至此,token的服務端驗證邏輯結束

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM