spring-security-oauth2認(rèn)證、資源、客戶端服務(wù)器獨(dú)立搭建教程(二)

概念理解

授權(quán)碼模式:用戶訪問應(yīng)用A,點(diǎn)擊微信授權(quán)登錄,跳轉(zhuǎn)至微信的登錄頁(yè)面,輸入用戶名和密碼,選擇授權(quán),則返回AccessToken給應(yīng)用A,應(yīng)用A拿著這個(gè)AccessToken在后臺(tái)調(diào)用微信提供的接口,獲取用戶信息,自動(dòng)注冊(cè)成為應(yīng)用A的用戶?!敬颂幍目蛻舳撕褪跈?quán)服務(wù)器分屬不同的公司所有】
密碼模式:該模式一般用于APP或者Web端用戶登錄,用戶輸入網(wǎng)站的賬號(hào)和密碼提交給客戶端,客戶端將用戶名+密碼+client_id+client_secret 提交給授權(quán)服務(wù)器獲取AccessToken【此時(shí)的客戶端和授權(quán)服務(wù)器都隸屬于同一家公司所有】。

  • JWT和OAuth2 :JWT可以理解為一種加密方式,使用自定義加密的信息,而OAuth2則是一種認(rèn)證授權(quán)的協(xié)議規(guī)范,有授權(quán)碼模式、密碼模式、客戶端模式、簡(jiǎn)化模式。
  • Spring-Security-OAuth2 :以Spring為主體而衍生的一個(gè)框架,用于搭建認(rèn)證授權(quán)服務(wù)器。
    1、實(shí)現(xiàn)存儲(chǔ)OAuth2生成的AccessToken的多種方式【此處是指存儲(chǔ)AccessToken的多種方式,比如Mysql存儲(chǔ)、Redis存儲(chǔ),無存儲(chǔ)的JWT實(shí)現(xiàn)】
    2、搭建資源服務(wù)器、客戶端、認(rèn)證授權(quán)服務(wù)器的相關(guān)實(shí)現(xiàn)類,簡(jiǎn)化用戶代碼實(shí)現(xiàn)。

授權(quán)碼模式(授權(quán)碼登錄流程)

1、用戶進(jìn)入網(wǎng)站的登錄頁(yè)面,選擇第三方登錄(如微信、QQ等),
2、進(jìn)入登錄頁(yè)面A,選擇微信登錄。
3、進(jìn)入微信的登錄授權(quán)頁(yè)面。
4、用戶輸入自己微信的賬號(hào)和密碼,點(diǎn)擊確認(rèn),登錄認(rèn)證成功。
5、進(jìn)入授權(quán)頁(yè)面,選擇授權(quán)。
6、調(diào)轉(zhuǎn)至指定的url并攜帶code值
7、后端接口處理code,調(diào)用對(duì)應(yīng)的第三方接口,獲取AccessToken成功后,繼續(xù)獲取用戶信息,并自動(dòng)注冊(cè)成為Web的用戶
8、上一步驟成功后,進(jìn)入Web主頁(yè)。

密碼模式(用戶密碼登錄流程)

1、用戶進(jìn)入網(wǎng)站的登錄頁(yè)面
2、輸入網(wǎng)站的用戶名和密碼
3、封裝用戶名和密碼,攜帶網(wǎng)站在授權(quán)服務(wù)器注冊(cè)申請(qǐng)到的client_id和client_secret信息,提交給授權(quán)服務(wù)器 oauth2-server 獲取AccessToken
4、獲取成功

項(xiàng)目地址


項(xiàng)目初始化和運(yùn)行

1、初始化數(shù)據(jù)庫(kù)文件:OAuth2文件/初始化數(shù)據(jù)庫(kù)/initDataBase.sql
2、host添加映射:
  127.0.0.1 www.newbee.cn ###客戶端        
  127.0.0.1 www.v5.cn ### 資源和認(rèn)證授權(quán)服務(wù)器
3、啟動(dòng) oauth2-server、oauth2-resource、oauth2-client

密碼模式案例測(cè)試

密碼模式流程:
1、獲取AccessToken:訪問oauth2-client的swagger2地址【http://www.newbee.cn:8052/oauth2-client/swagger-ui.html#/】,使用默認(rèn)swagger2的數(shù)據(jù),點(diǎn)擊try,將獲取AccessToken
2、為請(qǐng)求添加頭信息:訪問oauth2-resource的swagger2地址【http://www.v5.cn:8051/oauth2-resouce/swagger-ui.html#/】,使用步驟1獲取的AccessToken數(shù)據(jù),點(diǎn)擊右上角的 Authorize 按鈕,在彈出框的提示符 api_key輸入框內(nèi)輸入 Bearer AccessToken值【Bearer+空格+AccessToken】
3、調(diào)用資源服務(wù)器的接口:點(diǎn)擊oauth2-resource的swagger2地址中的各個(gè)接口地址,
    3.1、比如點(diǎn)擊接口:authenticated/roleAllowed/admin,該接口需要權(quán)限:ROLE_ADIMIN
        返回結(jié)果:{ "error": "unauthorized","error_description": "Full authentication is required to access this resource"
    5.2、比如點(diǎn)擊接口:authenticated/roleAllowed/member,該接口需要權(quán)限:ROLE_MEMBER
        返回結(jié)果:success                                                    
    用戶擁有權(quán)限:ROLE_MEMBER,而沒有:ROLE_ADIMIN

授權(quán)碼模式案例測(cè)試

授權(quán)碼模式測(cè)試流程:
1、瀏覽器打開鏈接地址【http://www.newbee.cn:8052/oauth2-client/login.html】
2、點(diǎn)擊授權(quán)登錄鏈接,將訪問【http://www.v5.cn:8050/oauth2-server/oauth/authorize?client_id=wechat_client_id&redirect_uri=http://www
.newbee.cn:8052/oauth2-client/thirdLogin/WeChat&response_type=code&scope=read】
3、授權(quán)服務(wù)器oauth2-server重定向至登錄頁(yè)面【http://www.v5.cn:8050/oauth2-server/login】
3、在頁(yè)面輸入用戶名和密碼:username e10adc3949ba59abbe56e057f20f883e,點(diǎn)擊login按鈕
4、認(rèn)證成功,進(jìn)入【http://www.v5.cn:8050/oauth2-server/oauth/authorize?client_id=wechat_client_id&redirect_uri=http://www
.newbee.cn:8052/oauth2-client/thirdLogin/WeChat&response_type=code&scope=read】點(diǎn)擊Authorize按鈕。
5、瀏覽器URL【http://www.newbee.cn:8052/oauth2-client/thirdLogin/WeChat?code=aOMzEi】,頁(yè)面顯示AccessToken值:{"accessToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsib2F1dGgyLXJlc291cmNlIl0sInNhbHQiOiIxMjM0NTYiLCJ1c2VyX25hbWUiOiJ1c2VybmFtZSIsInNjb3BlIjpbInJlYWQiXSwiZXhwIjoxNTQ4NzMxNTM4LCJhdXRob3JpdGllcyI6WyJST0xFX01FTUJFUiJdLCJqdGkiOiIyYjY1YzY4Ni0zZDQwLTQyNGItODgwOC03ZWExODg4NWU1ZWEiLCJjbGllbnRfaWQiOiJ3ZWNoYXRfY2xpZW50X2lkIn0.zQPiP3ds1uBcmoRp4cGPDrUf24KowAhQsG8751m-Erw","refreshToken":"2b65c686-3d40-424b-8808-7ea18885e5ea","expiresIn":599,"scope":"read"}

個(gè)人理解


SpringCloud的OAuth2理解:
用戶身份用密碼模式,比如APP、Web的用戶登錄。
微服務(wù)客戶端之間的API調(diào)用使用客戶端模式,比如Feign客戶端調(diào)用。
AccessToken將在header中攜帶,弄成可配置的形式。
具體可以參考微服務(wù)的腳手架JHipster的實(shí)現(xiàn),其采用的是定義了一個(gè) @AuthorizedFeignClients注解。

參考鏈接

OAuth2授權(quán)
spring-oauth-server 數(shù)據(jù)庫(kù)表說明
Spring Security 入門系列
從零開始的Spring Security OAuth2
關(guān)于 Token,你應(yīng)該知道的十件事

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容