溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

發(fā)布時間:2021-09-28 09:44:51 來源:億速云 閱讀:94 作者:柒染 欄目:大數(shù)據(jù)

SpringBootSecurity中OAuth2.0簡單示例是怎樣的,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

OAuth3.0

OAuth 引入了一個授權(quán)層,用來分離兩種不同的角色:客戶端和資源所有者??蛻舳藖砩暾堎Y源,資源所有者同意以后,資源服務(wù)器可以向客戶端頒發(fā)令牌??蛻舳送ㄟ^令牌,去請求數(shù)據(jù)。也就是說,OAuth 的核心就是向第三方應(yīng)用頒發(fā)令牌。而且,OAuth 2.0 規(guī)定了四種獲得令牌的流程。你可以選擇最適合自己的那一種,向第三方應(yīng)用頒發(fā)令牌。

下面我們來使用spring cloud security 和 spring cloud oauth3兩個組件來簡單實現(xiàn)授權(quán)流程。

授權(quán)服務(wù)

下面我們來使用spring cloud security 實現(xiàn)一個授權(quán)服務(wù),首先來引入依賴:

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

除了一個web組件,只引入了一個spring-cloud-starter-oauth3,這是因為spring cloud下的oauth3組件已經(jīng)包含了security:

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

首先寫一個正常的登錄功能,application配置文件和啟動類都不用增加特殊配置,主要來配置security配置類:

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

這里面基本沒有特殊的配置,都是前面遇到過的熟悉的配置。有了這個配置類,基本的登錄功能就有了,要想有授權(quán)功能,還需要一個授權(quán)配置類,授權(quán)配置類需要繼承 AuthorizationServerConfigurerAdapter 類,并引入 @EnableAuthorizationServer 注解:

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

首先配置一個客戶端:

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

然后配置token的存儲和管理,此處使用secret作為秘鑰,后面會介紹使用非對稱加密的方式 :

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

上面的token存儲在了內(nèi)存中,token也可以存儲在數(shù)據(jù)庫或者redis中。最后配置授權(quán)端點的訪問控制:

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

以上就是一個簡答的授權(quán)服務(wù)。

資源服務(wù)

下面來搭建一個資源服務(wù),其實授權(quán)和資源服務(wù)是可以合二為一的,此處為了清晰,將它們分開。pom中引入的依賴和授權(quán)服務(wù)是一樣的,同樣,配置文件和啟動類不需要做特殊配置。首先來寫兩個簡單的接口,一個定義為受保護,另一個不受保護:

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

然后定義一個資源服務(wù)配置類,需要繼承 ResourceServerConfigurerAdapter 類,并引入 @EnableResourceServer 注解:

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

首先來看令牌驗證的配置:

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

然后來看接口資源的攔截規(guī)則:

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

save開頭的可以直接訪問,不會被攔截,/user/save接口會被驗證。

注意上面配置的clientId和secret都是單一的配置死的,如果需要對多客戶端動態(tài)進行認(rèn)真,需要重寫,后面是通過http調(diào)用的方式解析訪問令牌(主要是通過訪問授權(quán)服務(wù)的/oauth/check_token解析)。

測試

我們來根據(jù)前面說到的流程測試,首先向授權(quán)服務(wù)申請一個授權(quán)碼:

  • http://localhost:8015/oauth/authorize?client_id=clientId&response_type=code&redirect_uri=http://localhost:8015/

訪問首先會跳轉(zhuǎn)到登錄頁面:

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

輸入配置中默認(rèn)的用戶名密碼登錄,然后進入下一個頁面:

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

這個頁面是真正的授權(quán)頁面,選擇Approve,點擊按鈕,同意授權(quán),授權(quán)碼會通過回調(diào)地址獲取,如下圖:

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

然后攜帶授權(quán)碼申請訪問令牌,需要訪問下面的地址(需要使用post方式):

  • http://localhost:8015/oauth/token?grant_type=authorization_code&code=授權(quán)碼&redirect_uri=http://localhost:8015/&client_id=clientId&client_secret=secret

將授權(quán)碼替換上面地址中的授權(quán)碼三個字,然后在postman中訪問:

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

其返回結(jié)果中,包含access_token參數(shù),就是我們需要的訪問令牌,token_type 參數(shù)說明了令牌的類型,一般類型為bearer或者refresh_token可以在訪問令牌過期后向授權(quán)服務(wù)申請新的令牌,expires_in參數(shù)是令牌的有效時間,單位是秒,圖中顯示默認(rèn)是12個小時。令牌已經(jīng)得到了,下面來訪問資源接口,首先試一下不受保護的資源:

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

可以看到直接就能訪問,然后訪問受保護的資源接口:

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

得到這樣的結(jié)果說明該接口需要認(rèn)證,我們來使用我們前面得到的令牌來訪問,首先選擇正確的認(rèn)真協(xié)議:

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

然后在右側(cè)填寫前面獲取的access_token:

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

然后訪問接口,就能看到受保護的資源通過令牌可以訪問:

SpringBootSecurity中OAuth2.0簡單示例是怎樣的

看完上述內(nèi)容,你們掌握SpringBootSecurity中OAuth2.0簡單示例是怎樣的的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI