日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【.NET Core项目实战-统一认证平台】第十一章 授权篇-密码授权模式

發(fā)布時(shí)間:2023/12/4 asp.net 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【.NET Core项目实战-统一认证平台】第十一章 授权篇-密码授权模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上篇文章介紹了基于Ids4客戶端授權(quán)的原理及如何實(shí)現(xiàn)自定義的客戶端授權(quán),并配合網(wǎng)關(guān)實(shí)現(xiàn)了統(tǒng)一的授權(quán)異常返回值和權(quán)限配置等相關(guān)功能,本篇將介紹密碼授權(quán)模式,從使用場景、源碼剖析到具體實(shí)現(xiàn)詳細(xì)講解密碼授權(quán)模式的相關(guān)應(yīng)用。

.netcore項(xiàng)目實(shí)戰(zhàn)交流群(637326624),有興趣的朋友可以在群里交流討論。


一、使用場景?


由于密碼授權(quán)模式需要用戶在業(yè)務(wù)系統(tǒng)輸入賬號(hào)密碼,為了安全起見,對于使用密碼模式的業(yè)務(wù)系統(tǒng),我們認(rèn)為是絕對可靠的,不存在泄漏用戶名和密碼的風(fēng)險(xiǎn),所以使用場景定位為公司內(nèi)部系統(tǒng)或集團(tuán)內(nèi)部系統(tǒng)或公司內(nèi)部app等內(nèi)部應(yīng)用,非內(nèi)部應(yīng)用,盡量不要開啟密碼授權(quán)模式,防止用戶賬戶泄漏。


  • 這種模式適用于用戶對應(yīng)用程序高度信任的情況。比如是用戶系統(tǒng)的一部分。


二、Ids4密碼模式的默認(rèn)實(shí)現(xiàn)剖析


在我們使用密碼授權(quán)模式之前,我們需要理解密碼模式是如何實(shí)現(xiàn)的,在上一篇中,我介紹了客戶端授權(quán)的實(shí)現(xiàn)及源碼剖析,相信我們已經(jīng)對Ids4客戶端授權(quán)已經(jīng)熟悉,今天繼續(xù)分析密碼模式是如何獲取到令牌的。


Ids4的所有授權(quán)都在TokenEndpoint方法中,密碼模式授權(quán)也是先校驗(yàn)客戶端授權(quán),如果客戶端校驗(yàn)失敗,直接返回刪除信息,如果客戶端校驗(yàn)成功,繼續(xù)校驗(yàn)用戶名和密碼,詳細(xì)實(shí)現(xiàn)代碼如下。


  • 1、校驗(yàn)是否存在grantType,然后根據(jù)不同的類型啟用不同的校驗(yàn)方式。

2、啟用密碼授權(quán)模式校驗(yàn)規(guī)則,首先校驗(yàn)傳輸?shù)膮?shù)和scope是否存在,然后校驗(yàn)用戶名密碼是否準(zhǔn)確,最后校驗(yàn)用戶是否可用。

3、運(yùn)行自定義上下文驗(yàn)證

  • 通過源碼剖析可以發(fā)現(xiàn),Ids4給了我們很多的驗(yàn)證方式,并且默認(rèn)也實(shí)現(xiàn)的驗(yàn)證和自定義的擴(kuò)展,這樣如果我們需要使用密碼授權(quán)模式,就可以重寫IResourceOwnerPasswordValidator來實(shí)現(xiàn)系統(tǒng)內(nèi)部用戶系統(tǒng)的驗(yàn)證需求。如果需要確認(rèn)用戶在登錄以后是否被注銷時(shí),可以重寫IProfileService接口實(shí)現(xiàn),這個(gè)驗(yàn)證主要是生成token校驗(yàn)時(shí)檢查。

4、最終生成Token

  • 根據(jù)不同的授權(quán)模式,生成不同的token記錄。

根據(jù)請求的scope判斷是否生成refreshToken,如果標(biāo)記了offline_access,則生成refreshToken,否則不生成。

5、RefreshToken持久化


當(dāng)我們使用了offline_access時(shí),就需要生成RefreshToken并進(jìn)行持久化,詳細(xì)的實(shí)現(xiàn)代碼如下。

  • 至此,我們整個(gè)密碼授權(quán)模式全部講解完成,相信大家跟我一樣完全掌握了授權(quán)的整個(gè)流程,如果需要持久化如何進(jìn)行持久化流程。


理解了完整的密碼授權(quán)模式流程后,使用自定義的用戶體系就得心應(yīng)手了,下面就開始完整的實(shí)現(xiàn)自定義帳戶授權(quán)。


三、設(shè)計(jì)自定義的賬戶信息并應(yīng)用


為了演示方便,我這里就設(shè)計(jì)簡單的用戶帳戶信息,作為自定義的哦帳戶基礎(chǔ),如果正式環(huán)境中使用,請根據(jù)各自業(yè)務(wù)使用各自的帳戶體系即可。

下面開始密碼授權(quán)模式開發(fā),首先需要重新實(shí)現(xiàn)IResourceOwnerPasswordValidator接口,使用我們定義的用戶表來驗(yàn)證請求的用戶名和密碼信息。


編寫完自定義校驗(yàn)后,我們需要注入到具體的實(shí)現(xiàn),詳細(xì)代碼如下。

剩下的就是把ICzarUsersServices接口實(shí)現(xiàn)并注入即可。詳細(xì)代碼如下。

最后我們實(shí)現(xiàn)倉儲(chǔ)接口和方法,即可完成校驗(yàn)流程。

現(xiàn)在萬事俱備,之前注入和插入測試用戶數(shù)據(jù)進(jìn)行測試了,為了方便注入,我們采用autofac程序集注冊。

然后需要修改ConfigureServices代碼如下,就完成了倉儲(chǔ)和服務(wù)層的注入。

為了驗(yàn)證密碼授權(quán)模式信息,這里需要往數(shù)據(jù)庫插入測試的用戶數(shù)據(jù),插入腳本如下。


--密碼123456 ?MD5加密結(jié)果INSERT INTO CzarUsers VALUES('13888888888','E10ADC3949BA59ABBE56E057F20F883E','金焰的世界','13888888888','541869544@qq.com',1);


四、測試密碼授權(quán)模式


注意:測試密碼授權(quán)模式之前,我們需要對測試的客戶端ClientGrantTypes表添加password授權(quán)方式。


打開我們的測試神器Postman,然后開始調(diào)試密碼授權(quán)模式,測試結(jié)果如下圖所示。


是不是很完美,得到了我們想要的授權(quán)結(jié)果,那我們查看下這個(gè)access_token是什么信息,可以使用https://jwt.io/查看到詳細(xì)的內(nèi)容,發(fā)現(xiàn)除了客戶端信息和用戶主鍵無其他附加信息,那如何添加自定義的Claim信息呢?


先修改下CzarUsers實(shí)體,增加如下代碼,如果有其他屬性可自行擴(kuò)展。

然后需要把用戶的claims應(yīng)用到Token,這里我們需要重寫IProfileService,然后把用戶的claim輸出,實(shí)現(xiàn)代碼如下。

然后別忘了注入.AddProfileService<CzarProfileService>(),好了現(xiàn)在我們再次測試下授權(quán),最終得到的結(jié)果如下所示。


奈斯,得到了我們預(yù)期授權(quán)結(jié)果。


那如何獲取refresh_token呢?通過前面的介紹,我們需要增加scope為offline_access,并且需要設(shè)置客戶端支持,因此AllowOfflineAccess屬性需要設(shè)置為True,現(xiàn)在來測試下獲取的授權(quán)結(jié)果。


最終完成了refresh_token的獲取,至此整個(gè)密碼授權(quán)模式全部講解并實(shí)現(xiàn)完成。


五、總結(jié)及思考


本篇文章我們從密碼授權(quán)模式使用場景、源碼剖析、自定義用戶授權(quán)來講解了密碼授權(quán)模式的詳細(xì)思路和代碼實(shí)現(xiàn),從中不難發(fā)現(xiàn)Ids4設(shè)計(jì)的巧妙,在默認(rèn)實(shí)現(xiàn)的同時(shí)也預(yù)留了很多自定義擴(kuò)展,本篇的自定義用戶體系也是重新實(shí)現(xiàn)接口然后注入就完成集成工作。本篇主要難點(diǎn)就是要理解Ids4的實(shí)現(xiàn)思路和數(shù)據(jù)庫的相關(guān)配置,希望通過本篇的講解讓我們熟練掌握密碼驗(yàn)證的流程,便于應(yīng)用到實(shí)際生產(chǎn)環(huán)境。


上篇的客戶端授權(quán)模式和本篇的密碼授權(quán)模式都講解完可能有人會(huì)存在以下幾個(gè)疑問。


  • 1、如何校驗(yàn)令牌信息的有效性?

  • 2、如何強(qiáng)制有效令牌過期?

  • 3、如何實(shí)現(xiàn)單機(jī)登錄?


下篇文章我將會(huì)從這3個(gè)疑問出發(fā),來詳細(xì)講解下這三個(gè)問題的實(shí)現(xiàn)思路和代碼。

相關(guān)文章:

  • AspNetCore中使用Ocelot之 IdentityServer4

  • Ocelot-基于.NET Core的開源網(wǎng)關(guān)實(shí)現(xiàn)

  • .NET Core微服務(wù)之基于Ocelot+IdentityServer實(shí)現(xiàn)統(tǒng)一驗(yàn)證與授權(quán)

  • Swagger如何訪問Ocelot中帶權(quán)限驗(yàn)證的API

  • Ocelot.JwtAuthorize:一個(gè)基于網(wǎng)關(guān)的Jwt驗(yàn)證包

  • .NET Core微服務(wù)之基于Ocelot實(shí)現(xiàn)API網(wǎng)關(guān)服務(wù)

  • .NET Core微服務(wù)之基于Ocelot實(shí)現(xiàn)API網(wǎng)關(guān)服務(wù)(續(xù))

  • .NET微服務(wù)體系結(jié)構(gòu)中為什么使用Ocelot實(shí)現(xiàn)API網(wǎng)關(guān)

  • Ocelot簡易教程(一)之Ocelot是什么

  • Ocelot簡易教程(二)之快速開始1

  • Ocelot簡易教程(二)之快速開始2

  • Ocelot簡易教程(三)之主要特性及路由詳解

  • Ocelot簡易教程(四)之請求聚合以及服務(wù)發(fā)現(xiàn)

  • Ocelot簡易教程(五)之集成IdentityServer認(rèn)證以及授權(quán)

  • Ocelot簡易教程(六)之重寫配置文件存儲(chǔ)方式并優(yōu)化響應(yīng)數(shù)據(jù)

  • Ocelot簡易教程(七)之配置文件數(shù)據(jù)庫存儲(chǔ)插件源碼解析

  • ASP.NET Core中Ocelot的使用:API網(wǎng)關(guān)的應(yīng)用

  • ASP.NET Core中Ocelot的使用:基于Spring Cloud Netflix Eureka的動(dòng)態(tài)路由

  • ASP.NET Core中Ocelot的使用:基于服務(wù)發(fā)現(xiàn)的負(fù)載均衡

  • 【.NET Core項(xiàng)目實(shí)戰(zhàn)-統(tǒng)一認(rèn)證平臺(tái)】第一章 功能及架構(gòu)分析

  • 定制Ocelot來滿足需求

  • 【.NET Core項(xiàng)目實(shí)戰(zhàn)-統(tǒng)一認(rèn)證平臺(tái)】第三章 網(wǎng)關(guān)篇-數(shù)據(jù)庫存儲(chǔ)配置(1)

  • 【.NET Core項(xiàng)目實(shí)戰(zhàn)-統(tǒng)一認(rèn)證平臺(tái)】第四章 網(wǎng)關(guān)篇-數(shù)據(jù)庫存儲(chǔ)配置(2)

  • 【.NET Core項(xiàng)目實(shí)戰(zhàn)-統(tǒng)一認(rèn)證平臺(tái)】第五章 網(wǎng)關(guān)篇-自定義緩存Redis

  • 【.NET Core項(xiàng)目實(shí)戰(zhàn)-統(tǒng)一認(rèn)證平臺(tái)】第六章 網(wǎng)關(guān)篇-自定義客戶端授權(quán)

  • 【.NET Core項(xiàng)目實(shí)戰(zhàn)-統(tǒng)一認(rèn)證平臺(tái)】第七章 網(wǎng)關(guān)篇-自定義客戶端限流

  • 【.NET Core項(xiàng)目實(shí)戰(zhàn)-統(tǒng)一認(rèn)證平臺(tái)】第八章 授權(quán)篇-IdentityServer4源碼分析

  • 【.NET Core項(xiàng)目實(shí)戰(zhàn)-統(tǒng)一認(rèn)證平臺(tái)】第九章 授權(quán)篇-使用Dapper持久化IdentityServer4

  • 【.NET Core項(xiàng)目實(shí)戰(zhàn)-統(tǒng)一認(rèn)證平臺(tái)】第十章 授權(quán)篇-客戶端授權(quán)

原文地址:https://www.cnblogs.com/jackcao/p/10140688.html


.NET社區(qū)新聞,深度好文,歡迎訪問公眾號(hào)文章匯總 http://www.csharpkit.com


總結(jié)

以上是生活随笔為你收集整理的【.NET Core项目实战-统一认证平台】第十一章 授权篇-密码授权模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。