天天看點

Spring Security OAuth2 Demo —— 用戶端模式(ClientCredentials)

前幾節分享了OAuth2的流程與其它三種授權模式,這幾種授權模式複雜程度由大至小:授權碼模式 > 隐式授權模式 > 密碼模式 > 用戶端模式

本文要講的是最後一種也是最簡單的模式:用戶端模式

其中用戶端模式的流程是:用戶端使用授權服器給的辨別與secret通路資源伺服器擷取token

編寫與說明密碼模式的Spring Security Oauth2的demo實作,讓未了解過相關知識的讀者對用戶端模式授權流程有個更直覺的概念

以下分成授權伺服器與資源伺服器分别進行解釋,隻講關鍵部分,詳情見Github:https://github.com/hellxz/spring-security-oauth2-learn

沒有使用者與授權伺服器互動,完全以機器形式擷取授權與使用授權,<code>用戶端機器 &lt;-&gt; 授權伺服器</code>,這種方式主要用于第一方應用中

Spring Security OAuth2 Demo —— 用戶端模式(ClientCredentials)
代碼結構與之前兩個模式相同,這裡便不再進行說明

SecurityConfig配置

基本的SpringSecurity的配置,開啟Spring Security的Web安全功能,填了一個使用者資訊,所有資源必須經過授權才可以通路

AuthorizationConfig授權伺服器配置

這裡開啟了授權伺服器的功能,相對其它模式主要是authorizedGrantTypes這裡設定的client_credentials,其餘不變

application.properties配置sever.port=8080

Spring Security OAuth2 Demo —— 用戶端模式(ClientCredentials)

這裡的關鍵就是ResourceConfig,配置比較簡單與其它幾個模式完全一緻,模式的不同主要表現在授權伺服器與用戶端伺服器上,資源伺服器隻做token的校驗與給予資源

ResourceController主要接收一個使用者名,傳回一個username與email的json串

Spring Security OAuth2 Demo —— 用戶端模式(ClientCredentials)

application.properties設定server.port=8081

準備工作到這裡就差不多了,開始測試

這裡用戶端使用postman手動發送請求進行示範

POST通路/oauth/token端點,擷取token

這裡除了請求頭使用client辨別資訊外,添加一個grant_type=client_credentials,隻需要這兩個參數就可以得到token

Spring Security OAuth2 Demo —— 用戶端模式(ClientCredentials)

token傳回值

使用token調用資源,通路http://localhost:8081/user/hellxz001,注意使用token添加Bearer請求頭

Spring Security OAuth2 Demo —— 用戶端模式(ClientCredentials)

本文是OAuth2授權模式代碼部分的最後一個,後續分别記錄下JWT與Redis兩種tokenStore方式