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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【.NET Core项目实战-统一认证平台】第十四章 授权篇-自定义授权方式

發布時間:2023/12/4 asp.net 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【.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项目实战-统一认证平台】第十四章 授权篇-自定义授权方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。