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 獲取更多資訊