国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - ASP.NET教程 - 詳解ASP.NET Core 之 Identity 入門(mén)(一)

詳解ASP.NET Core 之 Identity 入門(mén)(一)

2020-04-12 16:03Savorboard ASP.NET教程

本篇文章主要介紹了ASP.NET Core 之 Identity 入門(mén),主要負(fù)責(zé)對(duì)用戶的身份進(jìn)行認(rèn)證,有興趣的可以了解一下。

前言

在 ASP.NET Core 中,仍然沿用了 ASP.NET里面的 Identity 組件庫(kù),負(fù)責(zé)對(duì)用戶的身份進(jìn)行認(rèn)證,總體來(lái)說(shuō)的話,沒(méi)有MVC 5 里面那么復(fù)雜,因?yàn)樵贛VC 5里面引入了OWIN的東西,所以很多初學(xué)者在學(xué)習(xí)來(lái)很費(fèi)勁,對(duì)于 Identity 都是一頭霧水,包括我也是,曾經(jīng)在學(xué) identity 這個(gè)東西前后花了一個(gè)多月來(lái)搞懂里面的原理。所以大部分開(kāi)發(fā)者對(duì)于 Identity 并沒(méi)有愛(ài),也并沒(méi)有使用它,會(huì)覺(jué)得被綁架。

值得慶幸的是,在 ASP.NET Core 中,由于對(duì)模塊的抽象化逐漸清晰,以及中間件的使用,這使得 Identity 的學(xué)習(xí)和使用路線變得更加平易近人,下面就讓我們一起來(lái)看看吧。

Getting Started

在開(kāi)始之前,讓我們先忘記它和Entity Framework的關(guān)系,也忘記它和Authentication的關(guān)系,我們先學(xué)習(xí)幾個(gè)英語(yǔ)單詞。

有這么幾個(gè)“單詞”你可能需要弄明白:

# 1: Claims

大家應(yīng)該都知道身份證長(zhǎng)什么樣子的,如下:

詳解ASP.NET Core 之 Identity 入門(mén)(一)

其中,姓名:奧巴馬;性別:男;民族:肯尼亞;出生:1961.08.04,等等這些身份信息,可以看出都是一個(gè)一個(gè)的鍵值對(duì),那如果我們想在程序中存這些東西,怎么樣來(lái)設(shè)計(jì)呢?對(duì),你可能想到了使用一個(gè)字典進(jìn)行存儲(chǔ),一個(gè)Key,一個(gè)Value剛好滿足需求。但是Key,Value的話感覺(jué)不太友好,不太面向?qū)ο螅匀绻覀冏龀梢粋€(gè)對(duì)象的話,是不是更好一些呢?最起碼你可以用vs的智能提示了吧,我們修改一下,改成下面這樣:

?
1
2
3
4
5
6
7
//我給對(duì)象取一個(gè)名字叫`Claim`你沒(méi)有意見(jiàn)吧
public class Claim
{
  public string ClaimType { get; set; }
 
  public string ClaimValue { get; set; }
}

ClaimType 就是Key,ClaimValue就代表一個(gè)Value。這樣的話,剛好可以存儲(chǔ)一個(gè)鍵值對(duì)。這時(shí)候姓名:奧巴馬是不是可以存進(jìn)去了。

微軟的人很貼心,給我們準(zhǔn)備了一些默認(rèn)的ClaimType呢?很多常用的都在里面呢,一起看看吧:

這里延伸第一個(gè)知識(shí)點(diǎn):ClaimTypes

詳解ASP.NET Core 之 Identity 入門(mén)(一)

為了閱讀體驗(yàn),截圖我只放了一部分哦。可以看到有什么Name,Email,Gender,MobilePhone等常用的都已經(jīng)有了,其他的還有很多。細(xì)心的讀者可能注意了,它的命名空間是System.Security.Claims,那就說(shuō)明這個(gè)東西是.net 框架的一部分,嗯,我們暫時(shí)只需要知道這么多就OK了。

Claim 介紹完畢,是不是很簡(jiǎn)單,其他地方怎么翻譯我不管,在本篇文章里面,它叫 “證件單元”。

# 2: ClaimsIdentity

在有了“證件單元”之后,我們就用它可以制造一張身份證了,那么應(yīng)該怎么樣制造呢?有些同學(xué)可能已經(jīng)想到了,對(duì),就是新建一個(gè)對(duì)象,然后在構(gòu)造函數(shù)里面把身份證單元傳輸進(jìn)去,然后就得到一張身份證了。我們給這張身份證取一個(gè)英文名字叫 “ClaimsIdentity”,這個(gè)名字看起來(lái)還蠻符合的,既有 Claims 表示其組成部分,又有表示其用途的 Identity(身份),很滿意的一個(gè)名字。

實(shí)際上,在現(xiàn)實(shí)生活中,我們的身份證有一部分信息是隱藏的,有一部分是可以直接看到的。比如新一代的身份證里面存儲(chǔ)了你的指紋信息你是看不到的,這些都存儲(chǔ)在身份證里面的芯片中,那能看到的比如姓名啊,年齡啊等。我們?cè)谠O(shè)計(jì)一個(gè)對(duì)象的時(shí)候也是一樣,需要暴露出來(lái)一些東西,那這里我們的 ClaimsIdentity 就暴露出來(lái)一個(gè) Name,Lable等。

我們?cè)斓纳矸葑C(ClaimsIdentity)還有一個(gè)重要的屬性就是類(lèi)型(AuthenticationType),等等,AuthenticationType是什么東西?看起來(lái)有點(diǎn)眼熟的樣子。我們知道我們自己的身份證是干嘛的吧,就是用來(lái)證明我們的身份的,在你證明身份出示它的時(shí)候,其實(shí)它有很多種形式載體的,什么意思呢?比如你可以直接拿出實(shí)體形式的身份證,那也可以是紙張形式的復(fù)印件,也可以是電子形式的電子碼等等,這個(gè)時(shí)候就需要有一個(gè)能夠表示其存在形式的類(lèi)型字段,對(duì),這個(gè)AuthenticationType就是干這個(gè)事情的。

然后我們?cè)诮o我們的身份證添加一些潤(rùn)色,讓其看起來(lái)好看,比如提供一些方法添加 Claims 的,刪除 Claims的,寫(xiě)到二進(jìn)制流里面的啊等等,最終我們的身份證對(duì)象看起來(lái)基本上是這樣了:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class ClaimsIdentity
{
  public ClaimsIdentity(IEnumerable<Claim> claims){}
  
  //名字這么重要,當(dāng)然不能讓別人隨便改啊,所以我不許 set,除了我兒子跟我姓,所以是 virtual 的
  public virtual string Name { get; }
  public string Label { get; set; }
  
  //這是我的證件類(lèi)型,也很重要,同樣不許 set
  public virtual string AuthenticationType { get; }
  
  public virtual void AddClaim(Claim claim);
  
  public virtual void RemoveClaim(Claim claim);
  
  public virtual void FindClaim(Claim claim);
}

嗯,到這里,我們的身份證看起來(lái)似乎很完美了,但是從面向?qū)ο蟮慕嵌葋?lái)說(shuō)好像還少了點(diǎn)什么東西? 對(duì)~,還是抽象,我們需要抽象出來(lái)一個(gè)接口來(lái)進(jìn)行一些約束,約束什么呢?既然作為一個(gè)證件,那么肯定會(huì)涉及到這幾個(gè)屬性信息:

1、名字。2、類(lèi)型。3、證件是否合法。

反應(yīng)到接口里面的話就是如下,我們給接口取個(gè)名字叫:“身份(IIdentity)”:

這里延伸第二個(gè)知識(shí)點(diǎn):IIdentity接口。

?
1
2
3
4
5
6
7
8
9
10
11
12
// 定義證件對(duì)象的基本功能。
public interface IIdentity
{
  //證件名稱(chēng)
  string Name { get; }
  
  // 用于標(biāo)識(shí)證件的載體類(lèi)型。
  string AuthenticationType { get; }
  
  //是否是合法的證件。
  bool IsAuthenticated { get; }
}

所以我們的 ClaimsIdentity 最終看起來(lái)定義就是這樣的了:

?
1
2
3
4
public class ClaimsIdentity : IIdentity
{
  //......
}

ClaimsIdentity 介紹完畢,是不是發(fā)現(xiàn)也很簡(jiǎn)單,其他地方怎么翻譯我不管,在本篇文章里面,它叫 “身份證”。

# 3: ClaimsPrincipal

有了身份證,我們就能證明我就是我了,有些時(shí)候一個(gè)人有很多張身份證,你猜這個(gè)人是干嘛的? 對(duì),不是黃牛就是詐騙犯。

但是,有些時(shí)候一個(gè)人還有其他很多種身份,你猜這個(gè)人是干嘛的?這就很正常了對(duì)不對(duì),比如你可以同時(shí)是一名教師,母親,商人。如果你想證明你同時(shí)有這幾種身份的時(shí)候,你可能需要出示教師證,你孩子的出生證,法人代表的營(yíng)業(yè)執(zhí)照證。

在程序中,一個(gè)身份證不僅僅代表你這個(gè)人了,而是代表一個(gè)身份,是證明你自己的主要身份哦。如果一個(gè)人還有其他很多種身份,這個(gè)時(shí)候就需要有一個(gè)東西(載體)來(lái)攜帶著這些證件了對(duì)吧?OK,我們給需要攜帶證件的這個(gè)對(duì)象取一個(gè)貼切點(diǎn)的名字,叫“證件當(dāng)事人(ClaimsPrincipal)”吧。

以下是 Principal 這個(gè)單詞在詞典給出的解釋?zhuān)矣盟銘?yīng)該沒(méi)意見(jiàn)吧:

principal  ['pr?ns?pl] 

adj. 主要的;資本的

n. 首長(zhǎng);校長(zhǎng);資本;當(dāng)事人

這個(gè)時(shí)候可能有同學(xué)會(huì)問(wèn)了,是不是應(yīng)該叫ClaimsIdentityPrincipal比較好呢?嗯,我也覺(jué)得應(yīng)該叫 ClaimsIdentityPrincipal 可能更好一點(diǎn),或許微軟的人偷懶了,簡(jiǎn)寫(xiě)成了ClaimsPrincipal

知道其功能后,代碼就很好寫(xiě)了,和上面ClaimsIdentity一樣的套路:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ClaimsPrincipal
{
  //把擁有的證件都給當(dāng)事人
  public ClaimsPrincipal(IEnumerable<ClaimsIdentity> identities){}
  
  //當(dāng)事人的主身份呢
  public virtual IIdentity Identity { get; }
  
  public virtual IEnumerable<ClaimsIdentity> Identities { get; }
  
  public virtual void AddIdentity(ClaimsIdentity identity);
  
  //為什么沒(méi)有RemoveIdentity , 留給大家思考吧?
}

當(dāng)時(shí)人看起來(lái)也幾乎完美了,但是我們還需要對(duì)其抽象一下,抽象哪些東西呢? 作為一個(gè)當(dāng)事人,你應(yīng)該有一個(gè)主身份吧,就是你的身份證咯,可能你還會(huì)用到角色(角色后面會(huì)詳細(xì)介紹,這里你知道有這么個(gè)東西就行了)。

這里延伸第三個(gè)知識(shí)點(diǎn):IPrincipal 接口。

?
1
2
3
4
5
6
7
8
public interface IPrincipal
{
  //身份
  IIdentity Identity { get; }
  
  //在否屬于某個(gè)角色
  bool IsInRole(string role);
}

然后,我們的 證件當(dāng)事人 看起來(lái)應(yīng)該是這樣的:

?
1
2
3
4
public class ClaimsPrincipal : IPrincipal
{
  //...
}

ClaimsPrincipal 介紹完了,也很簡(jiǎn)單吧? 其他地方怎么翻譯我不管,在本篇文章里面,它叫 “證件當(dāng)事人”。

想在,我們已經(jīng)知道了 “證件單元(Claims)” , “身份證(ClaimsIdentity)” , “證件當(dāng)事人(ClaimsPrincipal)”,并且整理清楚了他們之間的邏輯關(guān)系,趁熱打鐵,下面這個(gè)圖是一個(gè)identity登入部分的不完全示意圖,虛線圈出來(lái)的部分應(yīng)該可以看懂了吧:

詳解ASP.NET Core 之 Identity 入門(mén)(一)

可以看出,首先我們?cè)赼pp這邊有一些證件單元,然后調(diào)用ClaimsIdentity把證件單元初始化為一個(gè)身份證,然后再把身份證交給證件當(dāng)事人由其保管。

才把 Getting Started 寫(xiě)完,發(fā)現(xiàn)已經(jīng)這么長(zhǎng)了,所以打算寫(xiě)成一個(gè)系列了,可能3 - 4篇吧。

總結(jié)

好了,本篇就先介紹到這里,在本篇博客中,我們學(xué)會(huì)了幾個(gè)英文單詞,并且知道了這些英文單詞在程序中是扮演這怎么樣一個(gè)對(duì)象。并且根據(jù)圖我們知道了這些對(duì)象在整個(gè)認(rèn)證系統(tǒng)種處在怎么樣一個(gè)位置。 我發(fā)現(xiàn)如果想把 identity 講清楚僅僅靠這一篇博客是不夠的,下一篇我們將對(duì).NET Authentication中間件進(jìn)行抽絲剝繭,直到掌握.NET的整個(gè)認(rèn)證系統(tǒng)后,我們?cè)賮?lái)看一下 Identiy 到底和 Entity Framework 有著怎樣的愛(ài)恨情仇。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://www.cnblogs.com/savorboard/p/aspnetcore-identity.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 女人夜夜春高潮爽av片 | 黄色国产精品 | 天堂中文av | 亚洲成av人片在线观看无码 | 桃色五月 | 国产一区二区三区四区在线观看 | 91国产精品 | 亚洲无线看 | 毛片com| 免费大片黄在线观看 | av网站免费在线观看 | 黄色一级片在线观看 | 我要看免费黄色片 | 欧美在线观看www | 国产精品123区 | 激情网在线观看 | 欧美日韩国产高清 | 男女视频网站 | 午夜视频在线 | 日韩视频免费看 | 草草影院ccyycom | 国产韩国精品一区二区三区 | 狠狠操夜夜爱 | 日韩电影专区 | 色乱码一区二区三区网站 | 午夜婷婷丁香 | 国产综合久久久 | 欧美成人免费视频 | 国产视频色 | 亚洲国产美女视频 | 男女做爰猛烈叫床无遮挡 | 久久国产日韩 | 国产一区免费视频 | 99精品久久久 | 亚洲国产精品久久久久 | 国产又色又爽又黄又免费 | 激情亚洲 | 一区二区中文 | 依人久久久 | 亚洲精品区 | 91原创国产 |