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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

ASP.NET Core 基于声明的访问控制到底是什么鬼?

發(fā)布時(shí)間:2023/12/4 asp.net 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Core 基于声明的访问控制到底是什么鬼? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

從ASP.NET 4.x到ASP.NET Core,內(nèi)置身份驗(yàn)證已從基于角色的訪問控制(RBAC)轉(zhuǎn)變?yōu)榛诼暶鞯脑L問控制(CBAC)。

我們常用的HttpContext.User屬性ASP.NET 4.0時(shí)代是IPrincipal類型,ASP.NETCore現(xiàn)在強(qiáng)化為ClaimsPrincipal類型。

本文就一起來看看這難纏的、晦澀難懂的聲明式訪問控制。

1.Claims : 聲明

聲明是基于聲明的身份驗(yàn)證(claims-based authentication)的基礎(chǔ),聲明是某主題(Subject)的片段信息

聲明是個(gè)名詞,并不能說明主體可以做什么或不能做什么, 對(duì)應(yīng)現(xiàn)實(shí)生活中各種卡片上體現(xiàn)的片段信息。
使用術(shù)語(yǔ)“主題”是因?yàn)槁暶鞑粌H限于描述用戶,聲明可能與應(yīng)用程序,服務(wù)或設(shè)備有關(guān)。

主題Claim1Claim2Claim3Claim3Claim5Claim6Claim7Claim8
身份證身份證號(hào)姓名性別籍貫生日簽發(fā)機(jī)關(guān)簽發(fā)時(shí)間過期時(shí)間
工作狗牌姓名級(jí)別花名身份證號(hào)性別base地區(qū)入職時(shí)間---
王者榮耀賬號(hào)游戲等級(jí)大區(qū)角色氪金級(jí)別年齡注冊(cè)時(shí)間---
微信微信號(hào)昵稱注冊(cè)時(shí)間國(guó)籍實(shí)名證件手機(jī)號(hào)------
車牌車牌編號(hào)車牌所屬人車牌地區(qū)車牌性質(zhì)簽發(fā)時(shí)間簽發(fā)機(jī)關(guān)------
某大保健會(huì)員卡卡號(hào)姓名手機(jī)號(hào)會(huì)員級(jí)別辦卡時(shí)間辦卡門店------

//?聲明通過`System.Security.Claim`類表示 public?class?Claim?{public?string?Type?{?get;?}public?string?Value?{?get;?}public?string?ValueType?{?get;?}//?some?properties?have?been?omitted. }

對(duì)比可見:每個(gè)聲明都有一個(gè)標(biāo)識(shí)片段信息類型的Type屬性、保存片段信息的Value屬性、片段信息的數(shù)據(jù)類型。

var idClaim = new Claim(“Id”,“ 1”,“Integer”);????????//?用戶ID:整形 var?dobClaim?=?new?Claim(“dob”,“04/20/2000”,“Date”);??//?生日:事件類型 var?emailClaim?=?new?Claim(nameof(ClaimTypes.Name),?mockUser.Email,nameof(ClaimValueTypes.String)),

2. Identities:身份

同一主題的聲明組合在一起,稱為ClaimsIdentity。

對(duì)應(yīng)現(xiàn)實(shí)生活中各種卡片:身份證、工作狗牌、車牌、大保健會(huì)員卡,均體現(xiàn)了某一個(gè)主題。

public?class?ClaimsIdentity?{public?string?Name?{?get;?}public?IEnumerable<Claim>?Claims?{?get;?}public?string?AuthenticationType?{?get;?}????//?保存使用的身份驗(yàn)證方法(Bearer、Basic)public?bool?IsAuthenticated?{?get;?}//?some?properties?have?been?omitted. }

假設(shè)某WebAPI可通過其唯一ID和名稱來識(shí)別用戶。驗(yàn)證從用戶收到的承載令牌(JWT等)后,我們可以創(chuàng)建ClaimsIdentity來表示它們:

ClaimsIdentity?userIdentity?=?new?ClaimsIdentity(new?Claim[]?{new?Claim("Id",?"1"),new?Claim("Username",?"Bert")},"Bearer" );//userIdentity.IsAuthenticated?==?true?since?we?passed?"Bearer"?as?AuthenticationType.

3. Principals: 主體

ClaimsIdentity可以方便地表示一個(gè)主題(一組聲明),很多時(shí)候一個(gè)主體有多個(gè)身份,就像現(xiàn)實(shí)生活中我們有個(gè)身份卡片,這個(gè)時(shí)候我們就需要錢包或者賬號(hào)管理工具(1Passwowd、LassPass),將各種身份集中在一起就是主體ClaimsPrincipal。

接上面的例子, 如果WebAPI需要確保訪客使用的設(shè)備處于白名單,則可以對(duì)訪客維護(hù)設(shè)備身份:

ClaimsIdentity?deviceIdentity?=?new?ClaimsIdentity(new?Claim[]?{new?Claim("IP",?"192.168.1.1"),new?Claim("Agent",?"Mozilla/5.0?(Windows?NT?6.1;?Win64;?x64;?rv:47.0)?Gecko/20100101?Firefox/47.0")} ); //??針對(duì)訪客設(shè)備聲明,不要設(shè)置AuthenticationType

主體對(duì)象代表代碼運(yùn)行的用戶的安全上下文,是各種有效身份的組合。

public?class?ClaimsPrincipal?{public?IEnumerable<Claim>?Claims?{?get;?}public?IEnumerable<ClaimsIdentity>?{?get;?}public?ClaimsIdentity?Identity?{?get;?}public?virtual?IEnumerable<Claim>?FindAll(Predicate<Claim>?match);public?virtual?bool?HasClaim(string?type,?string?value);//?ClaimsPrincipal提供了一些輔助方法/屬性來檢查聲明. }var?principal?=?new?ClaimsPrincipal(new?IIdentity[]?{?userIdentity,?deviceIdentity?});

總結(jié)

基于聲明的身份驗(yàn)證是WebApp獲取它們需要的組織內(nèi)部、其他組織以及Internet上的用戶的身份信息的常用方法。它還為本地或云中運(yùn)行的應(yīng)用程序提供了一致的方法。基于聲明的身份驗(yàn)證將身份和訪問控制的各個(gè)元素抽象為兩個(gè)部分:聲明的概念以及頒發(fā)者或授權(quán)機(jī)構(gòu)的概念。[

  • Claims:?身份信息的片段數(shù)據(jù)

  • Identities:各種身份卡片

  • Principals:主體,各種身份賬戶的集中存儲(chǔ)地

    • ASP.NET Core端點(diǎn)路由作用原理

    • 臨近年關(guān),修復(fù)ASP.NET Core因?yàn)g覽器內(nèi)核版本引發(fā)的單點(diǎn)登錄故障

    • ASP.NET?Core結(jié)合Redis實(shí)踐消息隊(duì)列

    • Quartz.net在集群環(huán)境下部署任務(wù)的姿勢(shì)

    • ASP.NET Core應(yīng)用注意這一點(diǎn),CTO會(huì)對(duì)你刮目相看

    更多精彩

    掃碼關(guān)注

    總結(jié)

    以上是生活随笔為你收集整理的ASP.NET Core 基于声明的访问控制到底是什么鬼?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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