掃二維碼與項(xiàng)目經(jīng)理溝通
我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
前面介紹OAuth2.0的基礎(chǔ)知識(shí)點(diǎn)時(shí)介紹過支持的4種授權(quán)類型,分別如下:

創(chuàng)新互聯(lián)一直秉承“誠信做人,踏實(shí)做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個(gè)客戶多一個(gè)朋友!為您提供網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)頁設(shè)計(jì)、小程序設(shè)計(jì)、成都網(wǎng)站開發(fā)、成都網(wǎng)站制作、成都軟件開發(fā)、成都app軟件開發(fā)是成都本地專業(yè)的網(wǎng)站建設(shè)和網(wǎng)站設(shè)計(jì)公司,等你一起來見證!
實(shí)際生產(chǎn)中上述四種授權(quán)類型根本不夠用,比如常見的授權(quán)類型如下:
因此我們必須懂得OAuth2.0如何自定義授權(quán)類型,這也是本篇文章的重點(diǎn)。
Spring Security 定制授權(quán)類型其實(shí)很簡單,主要是掌握其中的思路,下面是密碼模式的授權(quán)流程,如下圖:
根據(jù)上述流程圖可以跟著源碼進(jìn)去看看,不難發(fā)現(xiàn)有幾個(gè)如下重要點(diǎn):
因此想要自定義一個(gè)授權(quán)類型,必須構(gòu)建自己的TokenGranter、AuthenticationProvider、AuthenticationToken。
下面就以手機(jī)號(hào)+密碼的登錄方式定義一個(gè)類型:mobile_pwd,剩下的自己照葫蘆畫瓢。
這個(gè)和密碼授權(quán)類型類似,要實(shí)現(xiàn)一個(gè)方法從數(shù)據(jù)庫中根據(jù)手機(jī)號(hào)查詢用戶的詳細(xì)信息。
定義一個(gè)SmsCodeUserDetailService接口如下:
主要就是一個(gè) loadUserByMobile() 方法,實(shí)現(xiàn)類如下:
類似于密碼模式的中UsernamePasswordAuthenticationToken,自定義一個(gè)MobilePasswordAuthenticationToken封裝手機(jī)號(hào)和密碼,如下:
每種授權(quán)類型都對應(yīng)一種TokenGranter,其中會(huì)定義授權(quán)類型的名稱,比如密碼模式的ResourceOwnerPasswordTokenGranter,其中的GRANT_TYPE為password。
自定義一個(gè)MobilePwdGranter,照葫蘆畫瓢,模仿著改改,代碼如下:
這個(gè)類就是真正的處理類,經(jīng)過TokenGranter后,會(huì)找到對應(yīng)的AuthenticationProvider,然后取出參數(shù)從數(shù)據(jù)庫(UserDetailService)中查詢對應(yīng)的信息進(jìn)行匹配。
自定義MobilePasswordAuthenticationProvider,代碼如下:
這里必須將自定義的MobilePasswordAuthenticationProvider注入到IOC容器,如果不注入,會(huì)報(bào)找不到能處理的AuthenticationProvider這個(gè)異常。
新建SmsCodeSecurityConfig,代碼如下:
注意:由于使用的外部配置,因此必須在全局配置中指定。
由于是分開配置,因此必須在全局配置中指定才會(huì)生效,代碼如下:
需要將自定義的授權(quán)類型加到集合CompositeTokenGranter中,此處需要修改認(rèn)證中心的配置類(AuthorizationServerConfig)中的代碼,如下:
oauth_client_details這個(gè)表是存儲(chǔ)客戶端的詳細(xì)信息的,需要在對應(yīng)的客戶端資源那一行中的authorized_grant_types這個(gè)字段中添加自定義的授權(quán)類型,多個(gè)用逗號(hào)分隔。
經(jīng)過上述的步驟已經(jīng)配置完成,下面來測試,啟動(dòng)服務(wù),請求如下:
授權(quán)類型主要是針對 認(rèn)證中心(oauth2-cloud-auth-server) 的改動(dòng),改動(dòng)的目錄如下:
陳某直接在之前網(wǎng)關(guān)整合Spring Security的源碼上更改了一版。

我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流