【.NET Core项目实战-统一认证平台】第十四章 授权篇-自定义授权方式
上篇文章我介紹了如何強制令牌過期的實現,相信大家對IdentityServer4的驗證流程有了更深的了解,本篇我將介紹如何使用自定義的授權方式集成老的業務系統驗證,然后根據不同的客戶端使用不同的認證方式來集成到統一認證平臺。
.netcore項目實戰交流群(637326624),有興趣的朋友可以在群里交流討論。
一、自定授權源碼剖析
當我們需要使用開源項目的某些功能時,最好了解實現的原理,才能正確和熟練使用功能,避免出現各種未知bug問題和出現問題無法解決的被動場面。
在使用此功能前,我們需要了解完整的實現流程,下面我將從源碼開始講解IdentityServer4是如何實現自定義的授權方式。
從我之前的文章中我們知道授權方式是通過Grant_Type的值來判斷的,所以我們自定義的授權方式,也是通過此值來區分,所以需要了解自定義的值處理流程。TokenRequestValidator是請求驗證的方法,除了常規驗證外,還增加了自定義的驗證方式。
從上面代碼可以看出,除了內置的授權方式,其他的都是用ValidateExtensionGrantRequestAsync來進行驗證,詳細的驗證規則繼續分析實現過程。
從代碼中可以看出,實現流程如下:
1、客戶端是否配置了自定義的授權方式。
2、是否注入了自定義的授權實現。
3、授權的scope客戶端是否有權限。
4、使用自定義的授權驗證方式校驗請求數據是否合法。
5、判斷是否有有效數據信息,可自行實現接口。
從源碼中,可以發現流程已經非常清晰了,核心類ExtensionGrantValidator實現了自定義授權的校驗過程,進一步分析下此類的代碼實現。
從上面代碼可以發現,自定義授權方式,只需要實現IExtensionGrantValidator接口即可,然后支持多個自定義授權方式的共同使用。
到此整個驗證過程解析完畢了,然后再查看下生成Token流程,實現方法為TokenResponseGenerator,這個方法并不陌生,前幾篇介紹不同的授權方式都介紹了,所以直接看實現代碼。
實現的代碼方式和客戶端模式及密碼模式一樣,這里就不多介紹了。
最后我們查看下是如何注入IExtensionGrantValidator,是否對外提供接入方式,發現IdentityServer4提供了AddExtensionGrantValidator擴展方法,我們自己實現自定義授權后添加即可,詳細實現代碼如下。
二、自定義授權實現
現在開始開發第一個自定義授權方式,GrantType定義為CzarCustomUser,然后實現IExtensionGrantValidator接口,為了演示方便,我新建一個測試用戶表,用來模擬老系統的登錄方式。
然后把實現驗證的方法,由于代碼太簡單,我就直接貼代碼如下。
現在可以定義自定義的授權類型了,我起名為CzarCustomUserGrantValidator,實現代碼如下。
這就實現了自定義授權的功能,是不是很簡單呢?然后添加此擴展方法。
現在是不是就可以使用自定義授權的方式了呢?打開PostMan測試,按照源碼解析和設計參數,測試信息如下,發現報錯,原來是還未配置好客戶端訪問權限,開啟權限測試如下。
三、客戶端權限配置
在使用IdentityServer4時我們一定要理解整個驗證流程。根據這次配置,我再梳理下流程如下:
1、校驗客戶端client_id和Client_Secret。
2、校驗客戶端是否有當前的授權方式。
3、校驗是否有請求scope權限。
4、如果非客戶端驗證,校驗賬號密碼或自定義規則是否正確。
5、非客戶端驗證,校驗授權信息是否有效。
通過此流程會發現我們缺少授權方式配置,所以請求時提示上面的提示,既然知道原因了,那就很簡單的來實現,添加客戶端自定義授權模式。此信息是在ClientGrantTypes表中,字段為客戶端ID和授權方式。我測試的客戶端ID為21,授權方式為CzarCustomUser,那直接使用SQL語句插入關系,然后再測試。
INSERT INTO ClientGrantTypes VALUES(21,'CzarCustomUser');發現可以獲取到預期結果,然后查看access_token是什么內容,顯示如下。
顯示的信息和我們定義的信息相同,而且可以通過amr來區分授權類型,不同的業務系統使用不同的認證方式,然后統一集成到認證平臺即可。
四、總結與思考
本篇我介紹了自定義授權方式,從源碼解析到最后的實現詳細講解了實現原理,并使用測試的用戶來實現自定義的認證流程,本篇涉及的知識點不多,但是非常重要,因為我們在使用統一身份認證時經常會遇到多種認證方式的結合,和多套不同應用用戶的使用,在掌握了授權原理后,就能在不同的授權方式中切換的游刃有余。
思考下,有了這些知識后,關于短信驗證碼登錄和掃碼登錄是不是有心理有底了呢?如果自己實現這類登錄應該都知道從哪里下手了吧。
下篇我將介紹常用登錄的短信驗證碼授權方式,盡情期待吧。
相關文章:
AspNetCore中使用Ocelot之 IdentityServer4
Ocelot-基于.NET Core的開源網關實現
.NET Core微服務之基于Ocelot+IdentityServer實現統一驗證與授權
Swagger如何訪問Ocelot中帶權限驗證的API
Ocelot.JwtAuthorize:一個基于網關的Jwt驗證包
.NET Core微服務之基于Ocelot實現API網關服務
.NET Core微服務之基于Ocelot實現API網關服務(續)
.NET微服務體系結構中為什么使用Ocelot實現API網關
Ocelot簡易教程(一)之Ocelot是什么
Ocelot簡易教程(二)之快速開始1
Ocelot簡易教程(二)之快速開始2
Ocelot簡易教程(三)之主要特性及路由詳解
Ocelot簡易教程(四)之請求聚合以及服務發現
Ocelot簡易教程(五)之集成IdentityServer認證以及授權
Ocelot簡易教程(六)之重寫配置文件存儲方式并優化響應數據
Ocelot簡易教程(七)之配置文件數據庫存儲插件源碼解析
ASP.NET Core中Ocelot的使用:API網關的應用
ASP.NET Core中Ocelot的使用:基于Spring Cloud Netflix Eureka的動態路由
ASP.NET Core中Ocelot的使用:基于服務發現的負載均衡
【.NET Core項目實戰-統一認證平臺】第一章 功能及架構分析
定制Ocelot來滿足需求
【.NET Core項目實戰-統一認證平臺】第三章 網關篇-數據庫存儲配置(1)
【.NET Core項目實戰-統一認證平臺】第四章 網關篇-數據庫存儲配置(2)
【.NET Core項目實戰-統一認證平臺】第五章 網關篇-自定義緩存Redis
【.NET Core項目實戰-統一認證平臺】第六章 網關篇-自定義客戶端授權
【.NET Core項目實戰-統一認證平臺】第七章 網關篇-自定義客戶端限流
【.NET Core項目實戰-統一認證平臺】第八章 授權篇-IdentityServer4源碼分析
【.NET Core項目實戰-統一認證平臺】第九章 授權篇-使用Dapper持久化IdentityServer4
【.NET Core項目實戰-統一認證平臺】第十章 授權篇-客戶端授權
【.NET Core項目實戰-統一認證平臺】第十一章 授權篇-密碼授權模式
【.NET Core項目實戰-統一認證平臺】第十二章 授權篇-深入理解JWT生成及驗證流程
【.NET Core項目實戰-統一認證平臺】第十三章 授權篇-如何強制有效令牌過期
原文地址:?https://www.cnblogs.com/jackcao/p/10330397.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的【.NET Core项目实战-统一认证平台】第十四章 授权篇-自定义授权方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员修仙之路--高性能排序多个文件
- 下一篇: asp.net ajax控件工具集 Au