最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談.Net Core 認(rèn)證系統(tǒng)源碼解析

 更新時間:2019年12月26日 09:27:45   作者:Green.Leaf  
這篇文章主要介紹了淺談.Net Core 認(rèn)證系統(tǒng)源碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

不知不覺.Net Core已經(jīng)推出到3.1了,大多數(shù)以.Net為技術(shù)棧的公司也開始逐步的切換到了Core,從業(yè)也快3年多了,一直堅(jiān)持著.不管環(huán)境怎么變,堅(jiān)持自己的當(dāng)初的選擇,堅(jiān)持信仰 .Net Core是個非常優(yōu)秀的框架,如果各位是從WebForm開始,一步步走到今天,自然而然就會發(fā)現(xiàn).微軟慢慢的開始將整個框架組件化,不在像以前那樣,所以的東西都傻瓜化,比如WebForm,拖拖控件往往能搞定大部分的事情.Core的擴(kuò)展性很好,將很多選擇權(quán)交給我們自己,而不是強(qiáng)行的讓我們?nèi)ソ邮芩且惶?對第三方組件的兼容性很好.換句話說,很多核心組件微軟提供了高層抽象,如果你想換,可以,不想換,也可以,用他默認(rèn)的實(shí)現(xiàn).其他的優(yōu)缺點(diǎn)也不一一細(xì)說了,也不是本文的重點(diǎn)。如果時間允許,建議大家可以深入的研究.Net Core的底層.

1、簡介

省去前面的創(chuàng)建Core Web項(xiàng)目的一系列操作.VS幫你自動化初始化好所有的基礎(chǔ)組件、環(huán)境.第一步就是認(rèn)證.就是登陸.當(dāng)然微軟提供了一套登陸組件.很全,很完善。項(xiàng)目在Core源碼

Security文件夾下,源碼自行去github下載.里面提供了若干個認(rèn)證方法,常見的Cookie認(rèn)證、JwtBear認(rèn)證等等.還包括FaceBook、Google等遠(yuǎn)程認(rèn)證方式.

本文暫時不講解具體的認(rèn)證方式,主要闡述核心認(rèn)證流程.

(1)、認(rèn)證系統(tǒng)的執(zhí)行過程

Core啟動認(rèn)證系統(tǒng)的方式很簡單

很簡單的一段代碼,看看它干了什么

很簡單,注入認(rèn)證中間件,關(guān)于中間件這里就不說多,不是文本的重點(diǎn),自行百度.看看中間價干了什么.

核心代碼,首先拿到DI中注入的認(rèn)證請求處理器集合,接著去DI中獲取認(rèn)證處理方案集合中的處理認(rèn)證請求上下文的方案類.接著去處理器集合中拿到處理遠(yuǎn)程認(rèn)證請求上下文的方案類對應(yīng)的認(rèn)證請求處理器,接著執(zhí)行處理器的HandleRequestAsync方法,完成遠(yuǎn)程認(rèn)證的處理.

接著

遠(yuǎn)程認(rèn)證流程執(zhí)行完畢之后,直接return.反之,如果當(dāng)前不是使用遠(yuǎn)程認(rèn)證,接著去認(rèn)證方案中拿到默認(rèn)的認(rèn)證方案,不為空,執(zhí)行上下文的擴(kuò)展方法context.AuthenticateAsync,這個方法干了什么如下:

執(zhí)行DI中注入的認(rèn)證服務(wù)方法,并傳入上下文和默認(rèn)的認(rèn)證方案名稱.

先判斷存不存在默認(rèn)認(rèn)證方案,不存在拋異常,接著去所有的認(rèn)證處理器集合中拿到默認(rèn)認(rèn)證方案的處理器.接著調(diào)用處理的認(rèn)證方法,認(rèn)證成功,判斷當(dāng)前用戶身份集合中在臨時緩存中存不存在,不存在,可以執(zhí)行Claim的轉(zhuǎn)換.這很好,說明用戶認(rèn)證成功之后的Cliam也是可以被轉(zhuǎn)換的.

只要注入IClaimsTransformation服務(wù)即可,你就可以執(zhí)行你需要的業(yè)務(wù)的Claim轉(zhuǎn)換,最后返回結(jié)果

到這里整個認(rèn)證流程結(jié)束.非常的簡單.且關(guān)鍵點(diǎn)的擴(kuò)展微軟都預(yù)留了.可以自定義實(shí)現(xiàn)

(2)、流轉(zhuǎn)服務(wù)的介紹.

上面介紹了整個認(rèn)證組件的流轉(zhuǎn)過程,因?yàn)槲覍α鞒毯芮宄?所以大家可能還是不理解.所以接下去開始介紹流轉(zhuǎn)必須服務(wù)的注入.

認(rèn)證處理器的Provider類,那么Core是在哪里注入認(rèn)證處理器的呢?

這里,核心也是紅框里的,下面的只是一些依賴組件。

微軟注入默認(rèn)的認(rèn)證處理器.看下獲取處理器的實(shí)現(xiàn),對應(yīng)中間件.

閱讀源碼發(fā)現(xiàn),Provider類并不具體實(shí)現(xiàn)提供認(rèn)證處理器的方法.而是通過SchemeProvider來提供.

原來是IAuthenticationSchemeProvider類提供認(rèn)證處理器.而且是通過反射實(shí)現(xiàn)(這點(diǎn)開銷,就沒必要考慮性能問題,當(dāng)然你可以考慮重構(gòu)),那么問題來了,在哪里出入IAuthenticationSchemeProvider服務(wù)內(nèi),回到上面那張圖

微軟也提供了默認(rèn)實(shí)現(xiàn),去看看GetSchemeAsync方法的實(shí)現(xiàn)

ok,到這里就說明認(rèn)證處理器是通過向這個字典寫入值,來實(shí)現(xiàn)的.

上面是認(rèn)證方案AuthenticationScheme類的核心字段,HandlerType就是認(rèn)證處理器.

AuthenticationSchemeProvider類維護(hù)了一個_schemes的字典,通過它向外輸出.認(rèn)證方案集合提供類.

接著認(rèn)證處理器集合提供類AuthenticationHandlerProvider通過解析

認(rèn)證方案集合提供類,拿到所有的認(rèn)證處理器.

到這里,很明顯,所有的認(rèn)證處理器都是通過向AuthenticationSchemeProvider的_schemes字典注入認(rèn)證處理器.既然如此,入口在哪?在AuthenticationBuilder類下面.

下面是Cookie認(rèn)證方式注入認(rèn)證處理器的方式

AddScmeme方法.在配置參數(shù)的同時,指定了處理器.

接著,回到中間件的圖

我們通過AuthenticationBuilder的AddScheme方法向_schemes集合寫入了認(rèn)證處理器且配置了處理器的參數(shù),接著通過AuthenticationHandlerProvider拿到了所有的認(rèn)證處理器.

接著我們通過Schemes方案集合拿到所有處理認(rèn)證請求上下文的處理器,執(zhí)行處理認(rèn)證請求上下文參數(shù).處理完畢.

接著我們解析Schemes中提供的默認(rèn)認(rèn)證方案,代碼如下:

根據(jù)

這個配置參數(shù),一般在入口注入:

中配置默認(rèn)方案名稱,拿到默認(rèn)認(rèn)證方案.再將處理過的認(rèn)證請求上下文和默認(rèn)方案傳給IAuthenticationService,這個Service也有默認(rèn)實(shí)現(xiàn),如下:

AuthenticationService將處理過的認(rèn)證請求上下文交給具體的認(rèn)證請求處理器來處理.并返回處理結(jié)果.認(rèn)證請求處理器前面說過了,通過AuthenticationBuilder的AddScheme方法來注入.

到這里,整個組件的流程介紹結(jié)束.純屬個人理解,能力有限,有問題,請指正,謝謝.

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • ASP.NET如何獲取兩個日期之間的天數(shù)

    ASP.NET如何獲取兩個日期之間的天數(shù)

    這篇文章主要介紹了ASP.NET獲取兩個日期之間的天數(shù)方法,需要的朋友可以參考下
    2014-03-03
  • 最詳細(xì)的ASP.NET微信JS-SDK支付代碼

    最詳細(xì)的ASP.NET微信JS-SDK支付代碼

    這篇文章主要為大家介紹了最詳細(xì)的ASP.NET微信JS-SDK支付代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • ASP.NET?MVC5網(wǎng)站開發(fā)用戶注冊(四)

    ASP.NET?MVC5網(wǎng)站開發(fā)用戶注冊(四)

    上一次把基本框架搭建起來了,這次開始整Web部分,終于可以看到界面了小激動一下,web項(xiàng)目部分從用戶功能開始,基本有注冊,登錄、注銷、查找、查看、刪除等涉及Member區(qū)域和Manage區(qū)域,供大家參考,具體內(nèi)容如下
    2015-09-09
  • 頁面編碼codepage=936和65001的區(qū)別

    頁面編碼codepage=936和65001的區(qū)別

    這篇文章主要介紹了頁面編碼codepage=936和65001的區(qū)別,需要的朋友可以參考下
    2015-07-07
  • ASP.Net?Core中的內(nèi)存和GC機(jī)制

    ASP.Net?Core中的內(nèi)存和GC機(jī)制

    這篇文章介紹了ASP.Net?Core中的內(nèi)存和GC機(jī)制,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • Repeater中嵌套Repeater的示例介紹

    Repeater中嵌套Repeater的示例介紹

    在某些特殊情況下是需要在Repeater中嵌套使用Repeater的,下面有個不錯的示例,感興趣的朋友可以參考下
    2014-01-01
  • JWT + ASP.NET MVC時間戳防止重放攻擊詳解

    JWT + ASP.NET MVC時間戳防止重放攻擊詳解

    這篇文章主要給大家介紹了關(guān)于JWT + ASP.NET MVC時間戳防止重放攻擊發(fā)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • asp.net 將設(shè)有過期策略的項(xiàng)添加到緩存中

    asp.net 將設(shè)有過期策略的項(xiàng)添加到緩存中

    調(diào)用 Insert 方法,將絕對過期時間或彈性過期時間傳遞給該方法。
    2009-04-04
  • 詳解.NET中負(fù)載均衡的使用

    詳解.NET中負(fù)載均衡的使用

    這篇文章主要介紹了詳解.NET中負(fù)載均衡的使用,負(fù)載均衡即LB,就是將并發(fā)的用戶請求通過規(guī)則后平衡、分?jǐn)偟蕉嗯_服務(wù)器上進(jìn)行執(zhí)行,以此達(dá)到壓力分?jǐn)?、?shù)據(jù)并行的效果
    2022-06-06
  • .net get set用法小結(jié)

    .net get set用法小結(jié)

    .net get set用法小結(jié)...
    2007-12-12

最新評論

泸溪县| 德兴市| 安乡县| 武汉市| 威信县| 长宁区| 乐都县| 偃师市| 马尔康县| 昭觉县| 丰县| 辰溪县| 娱乐| 广平县| 东乌珠穆沁旗| 丁青县| 环江| 同心县| 秦安县| 长武县| 武威市| 波密县| 宜兰市| 阿尔山市| 涡阳县| 永年县| 黔西| 龙里县| 新乡市| 柏乡县| 思茅市| 阳江市| 马尔康县| 信阳市| 宜兰市| 威信县| 开封市| 曲阳县| 聊城市| 清水河县| 德令哈市|