激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 實戰(zhàn)!微服務認證中心如何擴展授權(quán)模式實現(xiàn)多種方式登錄?

實戰(zhàn)!微服務認證中心如何擴展授權(quán)模式實現(xiàn)多種方式登錄?

2022-03-03 22:44不才陳某不才陳某 Java教程

本篇文章介紹一下Spring Security如何擴展新的授權(quán)類型,也是實際開發(fā)中非常重要的知識點。

目錄如下:

實戰(zhàn)!微服務認證中心如何擴展授權(quán)模式實現(xiàn)多種方式登錄?

為什么需要自定義授權(quán)類型?

前面介紹OAuth2.0的基礎知識點時介紹過支持的4種授權(quán)類型,分別如下:

  • 授權(quán)碼模式
  • 簡化模式
  • 客戶端模式
  • 密碼模式

實際生產(chǎn)中上述四種授權(quán)類型根本不夠用,比如常見的授權(quán)類型如下:

  • 微信認證
  • QQ認證
  • 手機號+驗證碼認證
  • 圖形驗證碼認證
  • 郵箱認證

因此我們必須懂得OAuth2.0如何自定義授權(quán)類型,這也是本篇文章的重點。

實現(xiàn)思路

Spring Security 定制授權(quán)類型其實很簡單,主要是掌握其中的思路,下面是密碼模式的授權(quán)流程,如下圖:

實戰(zhàn)!微服務認證中心如何擴展授權(quán)模式實現(xiàn)多種方式登錄?

根據(jù)上述流程圖可以跟著源碼進去看看,不難發(fā)現(xiàn)有幾個如下重要點:

  • 每種授權(quán)類型都對應一個實現(xiàn)類TokenGranter,其中定義著授權(quán)類型
  • 所有 TokenGranter 實現(xiàn)類都通過 CompositeTokenGranter 中的tokenGranters 集合存起來。
  • 然后通過判斷 grantType 參數(shù)來定位具體使用那個 TokenGranter實現(xiàn)類來處理授權(quán)。
  • 每種授權(quán)方式都對應一個AuthenticationProvider
  • TokenGranter 類會 new 一個 AuthenticationToken實現(xiàn)類,如 UsernamePasswordAuthenticationToken 傳給 ProviderManager類。

因此想要自定義一個授權(quán)類型,必須構(gòu)建自己的TokenGranter、AuthenticationProvider、AuthenticationToken。

代碼實現(xiàn)

下面就以手機號+密碼的登錄方式定義一個類型:mobile_pwd,剩下的自己照葫蘆畫瓢。

1、自定義UserDetailService

這個和密碼授權(quán)類型類似,要實現(xiàn)一個方法從數(shù)據(jù)庫中根據(jù)手機號查詢用戶的詳細信息。

定義一個SmsCodeUserDetailService接口如下:

實戰(zhàn)!微服務認證中心如何擴展授權(quán)模式實現(xiàn)多種方式登錄?

主要就是一個 loadUserByMobile() 方法,實現(xiàn)類如下:

實戰(zhàn)!微服務認證中心如何擴展授權(quán)模式實現(xiàn)多種方式登錄?

2、自定義AuthenticationToken

類似于密碼模式的中UsernamePasswordAuthenticationToken,自定義一個MobilePasswordAuthenticationToken封裝手機號和密碼,如下:

實戰(zhàn)!微服務認證中心如何擴展授權(quán)模式實現(xiàn)多種方式登錄?

3、自定義TokenGranter

每種授權(quán)類型都對應一種TokenGranter,其中會定義授權(quán)類型的名稱,比如密碼模式的ResourceOwnerPasswordTokenGranter,其中的GRANT_TYPE為password。

自定義一個MobilePwdGranter,照葫蘆畫瓢,模仿著改改,代碼如下:

實戰(zhàn)!微服務認證中心如何擴展授權(quán)模式實現(xiàn)多種方式登錄?

4、自定義AuthenticationProvider

這個類就是真正的處理類,經(jīng)過TokenGranter后,會找到對應的AuthenticationProvider,然后取出參數(shù)從數(shù)據(jù)庫(UserDetailService)中查詢對應的信息進行匹配。

自定義MobilePasswordAuthenticationProvider,代碼如下:

實戰(zhàn)!微服務認證中心如何擴展授權(quán)模式實現(xiàn)多種方式登錄?

實戰(zhàn)!微服務認證中心如何擴展授權(quán)模式實現(xiàn)多種方式登錄?

5、將自定義的MobilePasswordAuthenticationProvider注入IOC容器

這里必須將自定義的MobilePasswordAuthenticationProvider注入到IOC容器,如果不注入,會報找不到能處理的AuthenticationProvider這個異常。

新建SmsCodeSecurityConfig,代碼如下:

實戰(zhàn)!微服務認證中心如何擴展授權(quán)模式實現(xiàn)多種方式登錄?

注意:由于使用的外部配置,因此必須在全局配置中指定。

6、Security的全局配置指定SmsCodeSecurityConfig

由于是分開配置,因此必須在全局配置中指定才會生效,代碼如下:

實戰(zhàn)!微服務認證中心如何擴展授權(quán)模式實現(xiàn)多種方式登錄?

7、加到CompositeTokenGranter集合中

需要將自定義的授權(quán)類型加到集合CompositeTokenGranter中,此處需要修改認證中心的配置類(AuthorizationServerConfig)中的代碼,如下:

實戰(zhàn)!微服務認證中心如何擴展授權(quán)模式實現(xiàn)多種方式登錄?

8、oauth_client_details表中添加授權(quán)類型

oauth_client_details這個表是存儲客戶端的詳細信息的,需要在對應的客戶端資源那一行中的authorized_grant_types這個字段中添加自定義的授權(quán)類型,多個用逗號分隔。

實戰(zhàn)!微服務認證中心如何擴展授權(quán)模式實現(xiàn)多種方式登錄?

測試

經(jīng)過上述的步驟已經(jīng)配置完成,下面來測試,啟動服務,請求如下:

實戰(zhàn)!微服務認證中心如何擴展授權(quán)模式實現(xiàn)多種方式登錄?

源碼獲取

授權(quán)類型主要是針對 認證中心(oauth2-cloud-auth-server) 的改動,改動的目錄如下:

實戰(zhàn)!微服務認證中心如何擴展授權(quán)模式實現(xiàn)多種方式登錄?

陳某直接在之前網(wǎng)關整合Spring Security的源碼上更改了一版。

原文地址:https://mp.weixin.qq.com/s/4XS3cIFR0UBtCW4TSKtEKg

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青草久久久久 | a黄色网 | 国产精品嘿咻嘿咻在线播放 | 亚洲小视频在线播放 | 一级黄色大片在线观看 | 欧美三级欧美成人高清www | 亚洲乱操| 欧美一二区视频 | 日本aaaa片毛片免费观看视频 | 国产91免费看| 国产一级免费不卡 | 91成人免费看片 | av性色全交蜜桃成熟时 | 国产乱淫a∨片免费观看 | 久久艹精品视频 | av在线大全 | 91麻豆精品国产91久久久更新资源速度超快 | fc2国产成人免费视频 | 九九热视频这里只有精品 | 九九热色 | 污黄视频在线观看 | 宅男噜噜噜66国产在线观看 | 国产精品成人久久久久a级 av电影在线免费 | 国产成视频在线观看 | 日本看片一区二区三区高清 | a一级黄 | 欧洲成人一区 | 成人国产精品色哟哟 | 深夜视频在线观看 | 久久久久久免费免费 | 精品国产乱码久久久久久预案 | 成人综合免费视频 | 黄色作爱视频 | 国产资源视频在线观看 | 国产女厕一区二区三区在线视 | 欧美性生活久久 | 午夜视频在线免费播放 | 视频一区 中文字幕 | 黄色片网站免费 | 国产一区二区三区在线观看视频 | 国产在线看一区 |