天天看點

Spring Security 實戰幹貨:OAuth2登入擷取Token的核心邏輯

Spring Security 實戰幹貨:OAuth2登入擷取Token的核心邏輯

在上一篇Spring Security 實戰幹貨:OAuth2授權回調的核心認證流程中,我們講了當第三方同意授權後會調用<code>redirectUri</code>發送回執給我們的伺服器。我們的伺服器拿到一個中間授信憑據會再次進行認證,目的是為了擷取Token。而這個邏輯由<code>OAuth2LoginAuthenticationProvider</code>負責,經過上一文的分析後我們發現擷取Token的具體邏輯由<code>OAuth2AuthorizationCodeAuthenticationProvider</code>來完成,今天就把它的流程搞清楚,來看看Spring Security OAuth2 認證授權擷取Token的具體步驟。

注意:本Spring Security幹貨系列教程的OAuth2相關部分是在Spring Security 5.x版本的。

該類是<code>AuthenticationProvider</code>針對OAuth 2.0中Authorization Code Grant模式的實作。關于<code>AuthenticationProvider</code>有必要簡單強調一下,它已經多次在Spring Security幹貨系列中出現,十分重要!一定要去看看相關的分析和使用,它是你根據業務擴充認證方式管道的重要入口。

在該實作中包含了一個<code>OAuth2AccessTokenResponseClient</code>成員變量,它抽象了通過<code>tokenUri</code>端點從認證伺服器擷取Token的細節。你可以根據OAuth 2.0常用的四種模式來進行實作它, 以達到根據不同的政策來擷取Token的能力。

Spring Security 實戰幹貨:OAuth2登入擷取Token的核心邏輯

在Spring Security 5中OAuth 2.0登入的配置中預設使用<code>DefaultAuthorizationCodeTokenResponseClient</code>。如果你想使用自定義實作的話可以通過<code>HttpSecurity</code>來配置:

接下來我們看看<code>DefaultAuthorizationCodeTokenResponseClient</code>實作的擷取Token的邏輯:

這裡的方式跟我另一個開源項目Payment Spring Boot的請求方式異曲同工,都是三個步驟:

組織參數<code>RequestEntity</code>。

<code>RestOperations</code>發起請求。

解析<code>ResponseEntity</code>組織傳回值。

如果有些的OAuth 2.0認證伺服器擷取Token的方式比較特殊你可以自行實作<code>OAuth2AccessTokenResponseClient</code>。

<code>OAuth2AccessTokenResponseClient</code>是<code>OAuth2AuthorizationCodeAuthenticationProvider</code>的核心要點。搞清楚它的作用和機制就可以了。這裡我們總結一下<code>OAuth2AuthorizationCodeAuthenticationProvider</code>的認證過程:

檢測未授信<code>OAuth2AuthorizationCodeAuthenticationToken</code>的狀态是否合法。

通過<code>OAuth2AccessTokenResponseClient</code>請求OAuth 2.0認證伺服器擷取Token等資訊。

組裝認證過的授信<code>OAuth2AuthorizationCodeAuthenticationToken</code>傳回。

到此OAuth 2.0的登入流程就搞清楚了,讀者可通過系列文章進行學習批判。我是:碼農小胖哥,多多關注,擷取實用的程式設計幹貨。

<code>關注公衆号:Felordcn 擷取更多資訊</code>

個人部落格:https://felord.cn

部落客:碼農小胖哥

出處:felord.cn

本文版權歸原作者所有,不可商用,轉載需要聲明出處,否則保留追究法律責任的權利。如果文中有什麼錯誤,歡迎指出。以免更多的人被誤導。