Spring Security 實戰乾貨:OAuth2授權回撥的處理機制
1. 前言
上一文著重講了當用戶發起第三方授權請求是如何初始化OAuth2AuthorizationRequest
授權請求物件以及如何通過過濾器進行轉發到第三方的。今天我們接著這個流程往下走,來看看伺服器收到授權請求是怎麼做的。
2. OAuth2登入認證
當第三方收到OAuth2授權請求後,會將授權的回執通過我方提供的回撥請求redirect_uri
傳遞給我們。由於預設情況下回調的路徑滿足/login/oauth2/code/*
,所以我們只要找到攔截回撥的過濾器就可以知道Spring Security是如何處理回調了。通過搜尋確認了OAuth2LoginAuthenticationFilter
就是處理回撥的過濾器。
OAuth2LoginAuthenticationFilter
第三方認證伺服器在呼叫redirect_uri
時附加code
和state
引數,在被這個Filter
攔截後,建立一個待認證憑據OAuth2LoginAuthenticationToken
,並委託給了AuthenticationManager
進行身份驗證。
一旦成功驗證,則生成認證憑據OAuth2AuthenticationToken
和認證客戶端物件OAuth2AuthorizedClient
。 最後, OAuth2AuthenticationToken
返回,並最終儲存在SecurityContextRepository
完成認證處理;而OAuth2AuthorizedClient
OAuth2AuthorizedClientRepository
。流程圖如下:
這個過濾器和
UsernamePasswordAuthenticationFilter
一樣繼承了AbstractAuthenticationProcessingFilter
,流程有相像的地方。
3. 總結
當第三方授權後會通過回撥來通知客戶端,而客戶端收到回撥通知後會對授權結果進行認證操作才能表明這一套流程是合規的。而這個流程是由過濾器OAuth2LoginAuthenticationFilter
來控制的。今天對其流程進行了圖解,其中的認證過程還是一個未解之謎,鎖定:碼農小胖哥 ,這個答案會在系列的下一篇為你揭曉。
關注公眾號:Felordcn 獲取更多資訊