OAuth 2.0 資源伺服器
Spring Security 支援使用兩種 OAuth 2.0 Bearer Token 形式來保護端點
-
不透明 Token
在應用程式將其授權管理委派給授權伺服器 (例如 Okta 或 Ping Identity) 的情況下,這非常方便。資源伺服器可以諮詢此授權伺服器以授權請求。
本節詳細說明 Spring Security 如何提供對 OAuth 2.0 Bearer Token 的支援。
JWT 和不透明 Token 的工作範例都可以在 Spring Security 範例儲存庫中找到。 |
現在我們可以考慮 Bearer Token 身份驗證如何在 Spring Security 中運作。首先,我們看到,與基本身份驗證一樣,WWW-Authenticate 標頭會傳回給未經身份驗證的用戶端

上圖建立在我們的 SecurityFilterChain
圖表之上。
首先,使用者向使用者未經授權的
/private
資源發出未經身份驗證的請求。
Spring Security 的
AuthorizationFilter
指出未經身份驗證的請求被拒絕,並拋出 AccessDeniedException
。
由於使用者未經身份驗證,
ExceptionTranslationFilter
會啟動開始身份驗證。配置的 AuthenticationEntryPoint
是 BearerTokenAuthenticationEntryPoint
的實例,它會發送 WWW-Authenticate
標頭。RequestCache
通常是一個 NullRequestCache
,它不會儲存請求,因為用戶端能夠重播它最初請求的請求。
當用戶端收到 WWW-Authenticate: Bearer
標頭時,它知道應該使用 bearer token 重試。下圖顯示了 bearer token 被處理的流程

此圖建立在我們的 SecurityFilterChain
圖表之上。
當使用者提交他們的 bearer token 時,
BearerTokenAuthenticationFilter
會建立一個 BearerTokenAuthenticationToken
,這是一種 Authentication
,方法是從 HttpServletRequest
中提取 token。
接下來,
HttpServletRequest
會傳遞給 AuthenticationManagerResolver
,後者會選擇 AuthenticationManager
。BearerTokenAuthenticationToken
會傳遞到 AuthenticationManager
進行身份驗證。AuthenticationManager
的具體外觀取決於您是否配置了 JWT 或 不透明 token。
如果身份驗證失敗,則為失敗
-
SecurityContextHolder
會被清除。 -
AuthenticationEntryPoint
會被調用以觸發再次發送 WWW-Authenticate 標頭。
如果身份驗證成功,則為成功。
-
Authentication
會在SecurityContextHolder
上設定。 -
BearerTokenAuthenticationFilter
調用FilterChain.doFilter(request,response)
以繼續執行應用程式邏輯的其餘部分。