Spring Security 實戰乾貨:OAuth2授權回調的處理機制

  • 2020 年 11 月 17 日
  • 筆記

1. 前言

上一文著重講了當用戶發起第三方授權請求是如何初始化OAuth2AuthorizationRequest授權請求對象以及如何通過過濾器進行轉發到第三方的。今天我們接著這個流程往下走,來看看伺服器收到授權請求是怎麼做的。

2. OAuth2登錄認證

當第三方收到OAuth2授權請求後,會將授權的回執通過我方提供的回調請求redirect_uri傳遞給我們。由於默認情況下回調的路徑滿足/login/oauth2/code/*,所以我們只要找到攔截回調的過濾器就可以知道Spring Security是如何處理回調了。通過搜索確認了OAuth2LoginAuthenticationFilter就是處理回調的過濾器。

OAuth2LoginAuthenticationFilter

第三方認證伺服器在調用redirect_uri時附加codestate參數,在被這個Filter攔截後,創建一個待認證憑據OAuth2LoginAuthenticationToken,並委託給了AuthenticationManager進行身份驗證。

一旦成功驗證,則生成認證憑據OAuth2AuthenticationToken和認證客戶端對象OAuth2AuthorizedClient。 最後, OAuth2AuthenticationToken返回,並最終存儲在SecurityContextRepository完成認證處理;而OAuth2AuthorizedClient被保存到OAuth2AuthorizedClientRepository。流程圖如下:

OAuth2LoginAuthenticationFilter執行流程

這個過濾器和UsernamePasswordAuthenticationFilter一樣繼承了AbstractAuthenticationProcessingFilter,流程有相像的地方。

3. 總結

當第三方授權後會通過回調來通知客戶端,而客戶端收到回調通知後會對授權結果進行認證操作才能表明這一套流程是合規的。而這個流程是由過濾器OAuth2LoginAuthenticationFilter來控制的。今天對其流程進行了圖解,其中的認證過程還是一個未解之謎,鎖定:碼農小胖哥 ,這個答案會在系列的下一篇為你揭曉。

關注公眾號:Felordcn 獲取更多資訊

個人部落格://felord.cn