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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析

發布時間:2023/12/4 asp.net 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上篇文章我介紹了如何在網關上實現客戶端自定義限流功能,基本完成了關于網關的一些自定義擴展需求,后面幾篇將介紹基于IdentityServer4(后面簡稱Ids4)的認證相關知識,在具體介紹ids4實現我們統一認證的相關功能前,我們首先需要分析下Ids4源碼,便于我們徹底掌握認證的原理以及后續的擴展需求。

.netcore項目實戰交流群(637326624),有興趣的朋友可以在群里交流討論。

一、Ids4文檔及源碼

文檔地址?http://docs.identityserver.io/en/latest/

Github源碼地址?https://github.com/IdentityServer/IdentityServer4

二、源碼整體分析

【工欲善其事,必先利其器,器欲盡其能,必先得其法】

在我們使用Ids4前我們需要了解它的運行原理和實現方式,這樣實際生產環境中才能安心使用,即使遇到問題也可以很快解決,如需要對認證進行擴展,也可自行編碼實現。

源碼分析第一步就是要找到Ids4的中間件是如何運行的,所以需要定位到中間價應用位置app.UseIdentityServer();,查看到詳細的代碼如下。

通過上面的源碼,我們知道整體流程分為這5步實現。接著我們分析下每一步都做了哪些操作呢?

1、app.Validate()為我們做了哪些工作?

  • 校驗IPersistedGrantStore、IClientStore、IResourceStore是否已經注入?

  • 驗證IdentityServerOptions配置信息是否都配置完整

  • 輸出調試相關信息提醒

詳細的實現代碼如上所以,非常清晰明了,這時候有人肯定會問這些相關的信息時從哪來的呢?這塊我們會在后面講解。

2、BaseUrlMiddleware中間件實現了什么功能?

源碼如下,就是從配置信息里校驗是否設置了PublicOrigin原始實例地址,如果設置了修改下請求的Scheme和Host,最后設置IdentityServerBasePath地址信息,然后把請求轉到下一個路由。

這里源碼非常簡單,就是設置了后期要處理的一些關于請求地址信息。那這個中間件有什么作用呢?

就是設置認證的通用地址,當我們訪問認證服務配置地址http://localhost:5000/.well-known/openid-configuration的時候您會發現,您設置的PublicOrigin會自定應用到所有的配置信息前綴,比如設置option.PublicOrigin = "http://www.baidu.com";,顯示的json代碼如下。

可能還有些朋友覺得奇怪,這有什么用啊?其實不然,試想下如果您部署的認證服務器是由多臺組成,那么可以設置這個地址為負載均衡地址,這樣訪問每臺認證服務器的配置信息,返回的負載均衡的地址,而負載均衡真正路由到的地址是內網地址,每一個實例內網地址都不一樣,這樣就可以負載生效,后續的文章會介紹配合Consul實現自動的服務發現和注冊,達到動態擴展認證節點功能。

可能表述的不太清楚,可以先試著理解下,因為后續篇幅有介紹負載均衡案例會講到實際應用。

3、app.ConfigureCors(); 做了什么操作?

其實這個從字面意思就可以看出來,是配置跨域訪問的中間件,源碼就是應用配置的跨域策略。

很簡單吧,至于什么是跨域,可自行查閱相關文檔,由于篇幅有效,這里不詳細解釋。

4、app.UseAuthentication();做了什么操作?

就是啟用了默認的認證中間件,然后在相關的控制器增加[Authorize]屬性標記即可完成認證操作,由于本篇是介紹的Ids4的源碼,所以關于非Ids4部分后續有需求再詳細介紹實現原理。

5、IdentityServerMiddleware中間件做了什么操作?

這也是Ids4的核心中間件,通過源碼分析,哎呀!好簡單啊,我要一口氣寫100個牛逼中間件。哈哈,我當時也是這么想的,難道真的這么簡單嗎?接著往下分析,讓我們徹底明白Ids4是怎么運行的。

第一步從本地提取授權記錄,就是如果之前授權過,直接提取授權到請求上下文。說起來是一句話,但是實現起來還是比較多步驟的,我簡單描述下整個流程如下。

1、執行授權

如果發現本地未授權時,獲取對應的授權處理器,然后執行授權,看是否授權成功,如果授權成功,賦值相關的信息,常見的應用就是自動登錄的實現。

比如用戶U訪問A系統信息,自動跳轉到S認證系統進行認證,認證后調回A系統正常訪問,這時候如果用戶U訪問B系統(B系統也是S統一認證的),B系統會自動跳轉到S認證系統進行認證,比如跳轉到/login頁面,這時候通過檢測發現用戶U已經經過認證,可以直接提取認證的所有信息,然后跳轉到系統B,實現了自動登錄過程。

獲取路由處理器

其實這個功能就是攔截請求,獲取對應的請求的處理器,那它是如何實現的呢?

IEndpointRouter是這個接口專門負責處理的,那這個方法的實現方式是什么呢?可以右鍵-轉到實現,我們可以找到EndpointRouter方法,詳細代碼如下。

源碼功能我做了簡單的講解,發現就是提取對應路由處理器,然后轉換成IEndpointHandler接口,所有的處理器都會實現這個接口。但是IEnumerable<Endpoint>記錄是從哪里來的呢?而且為什么可以獲取到指定的處理器,可以查看如下代碼,原來都注入到默認的路由處理方法里。

  • 通過現在分析,我們知道了路由查找方法的原理了,以后我們想增加自定義的攔截器也知道從哪里下手了。

  • 執行路由過程并返回結果

    有了這些基礎知識后,就可以很好的理解var result = await endpoint.ProcessAsync(context);這句話了,其實業務邏輯還是在自己的處理器里,但是可以通過調用接口方法實現,是不是非常優雅呢?

    為了更進一步理解,我們就上面列出的路由發現地址(http://localhost:5000/.well-known/openid-configuration)為例,講解下運行過程。通過注入方法可以發現,路由發現的處理器如下所示。

  • 可以請求的地址會被攔截,然后進行處理。

    它的詳細代碼如下,跟分析的一樣是實現了IEndpointHandler接口。

    通過上面代碼說明,可以發現通過4步完成了整個解析過程,然后輸出最終結果,終止管道繼續往下進行。

    路由發現的具體實現代碼如下,就是把結果轉換成Json格式輸出,然后就得到了我們想要的結果。

    到此完整的路由發現功能及實現了,其實這個實現比較簡單,因為沒有涉及太多其他關聯的東西,像獲取Token和就相對復雜一點,然后分析方式一樣。

    6、繼續運行下一個中間件

    有了上面的分析,我們可以知道整個授權的流程,所有在我們使用Ids4時需要注意中間件的執行順序,針對需要授權后才能繼續操作的中間件需要放到Ids4中間件后面。

    三、獲取Token執行分析

    為什么把這塊單獨列出來呢?因為后續很多擴展和應用都是基礎Token獲取的流程,所以有必要單獨把這塊拿出來進行講解。有了前面整體的分析,現在應該直接這塊源碼是從哪里看了,沒錯就是下面這句。

    builder.AddEndpoint<TokenEndpoint>(EndpointNames.Token, ProtocolRoutePaths.Token.EnsureLeadingSlash());

    他的執行過程是TokenEndpoint,所以我們重點來分析下這個是怎么實現這么復雜的獲取Token過程的,首先放源碼。

    執行步驟如下:

  • 驗證是否為Post請求且使用form-data方式傳遞參數(直接看代碼即可)

  • 驗證客戶端授權

    詳細的驗證流程代碼和說明如下。

    ClientSecretValidator.cs

  • 驗證請求的信息是否有誤

    由于代碼太多,只列出TokenRequestValidator.cs部分核心代碼如下,

    1、創建生成的結果

    TokenResponseGenerator.cs根據不同的認證方式執行不同的創建方法,由于篇幅有限,每一個是如何創建的可以自行查看源碼。

    1、寫入日志記錄

    為了調試方便,把生成的token相關結果寫入到日志里。

    2、輸出最終結果

    把整個執行后的結果進行輸出,這樣就完成了整個驗證過程。

    四、總結

    通過前面的分析,我們基本掌握的Ids4整體的運行流程和具體一個認證請求的流程,由于源碼太多,就未展開詳細的分析每一步的實現,具體的實現細節我會在后續Ids4相關章節中針對每一項的實現進行講解,本篇基本都是全局性的東西,也在講解了了解到了客戶端的認證方式,但是只是介紹了接口,至于接口如何實現沒有講解,下一篇我們將介紹Ids4實現自定義的存儲并使用dapper替換EFCore實現與數據庫的交互流程,減少不必要的請求開銷。

    對于本篇源碼解析還有不理解的,可以進入QQ群:637326624進行討論。

    相關文章:

    • 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項目實戰-統一認證平臺】第七章 網關篇-自定義客戶端限流


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


    .NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

    總結

    以上是生活随笔為你收集整理的【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: www色天使| 亚洲一区中文字幕在线观看 | 亚洲国产日韩欧美 | 亚洲永久免费 | a在线天堂 | 久久精品无码专区 | 日本激情视频在线观看 | 看黄色小视频 | www视频免费观看 | 毛片久久久久久久 | 久久久黄色网 | 草草影院最新地址 | 亚洲中文一区二区 | 亚洲一区视频 | 深夜福利网| 99在线成人精品视频 | 朝鲜女人性猛交 | 国产激情av在线 | 国产精品成人网 | 午夜tv| 快色视频在线观看 | 波多野结衣操 | 国内久久久久 | 怡红院男人的天堂 | 天天想你免费观看完整版高清电影 | 漂亮人妻被中出中文字幕 | 三级视频网站在线观看 | sao浪受的饥渴日常 91免费入口 | 国产亚洲综合精品 | 亚洲精品无码久久久久久久 | 黄网在线免费 | 在线观看深夜视频 | 成人精品网址 | 精品黑人一区二区三区在线观看 | 色片网站在线观看 | 欧美激情一区二区三区在线 | 亚洲精品国偷拍自产在线观看蜜桃 | 四虎网站在线播放 | 18国产免费视频 | 美丽的姑娘在线观看免费 | 九月色婷婷 | 中文精品无码中文字幕无码专区 | 精品人妻无码一区二区色欲产成人 | 天天操天天添 | 黄色片aaa| 黄色伊人 | 国产视频精品久久 | 后进极品美女圆润翘臀 | 一区二区三区亚洲精品 | 亚洲成人一区 | 香蕉影院在线观看 | 一级美女视频 | 日日拍夜夜拍 | 国产精品福利网站 | 久草视频免费在线播放 | 91看片在线看 | 麻豆精品国产精华精华液好用吗 | 日本人添下边视频免费 | av加勒比| 国产精品久久久久久久久久东京 | 久久精品国产亚洲av麻豆色欲 | 色婷婷九月| 国产网红女主播精品视频 | 91一级视频 | 国产成人综合久久 | 97插插插 | 污污网站在线播放 | 国产精品一级视频 | 亚洲成人av电影网站 | 91视频看看 | 久久一卡二卡 | 女人扒开腿免费视频app | 五月婷婷丁香久久 | 亚洲欧洲天堂 | 欧美三级免费 | 日本成人在线视频网站 | 深夜福利视频网站 | 久久一区视频 | 麻豆久久久久久久久久 | 爱福利视频广场 | 中文字幕在线视频不卡 | 草逼网站| 无码人妻aⅴ一区二区三区 国产高清一区二区三区四区 | 91人妻一区二区 | 欧美自偷自拍 | 欧美一级乱黄 | 欧美成人免费在线观看 | 久色在线| 91麻豆一区二区 | 国内精品在线观看视频 | 国产在线观看 | 欧美日韩久久婷婷 | 亚洲视频五区 | 亚洲黄色a级片 | 天天爽夜夜爽视频 | 成人区人妻精品一区二区不卡视频 | 国产精品久久久久久影视 | 免费黄色网址观看 | 欧美在线色 |