asp.net core 認證&授權:Claim+ClaimsIdentity+ClaimsPrincipal


Claim表示一個聲明單元,它用來組成ClaimsIdentity。ClaimsIdentity表示一個證件,例如身份證,身份證上面的名字表示一個Claim,身份證號也表示一個Claim,所有這些Claim組成身份證,即ClaimsIdentity。一個人不止有一個能夠表示身份的東西,還有駕駛證、戶口本等等,這些都是一個一個的CLaimsIdentity,而我們人本身是一個ClaimsPrincipal。用程序來表示就是:

 

Claim nameClaim = new Claim(ClaimTypes.Name, "pangjianxin");
Claim idClaim = new Claim(ClaimTypes.Sid, "1502xxxxxxxxxx");
Claim genderClaim = new Claim(ClaimTypes.Gender, "female");
Claim countryClaim = new Claim(ClaimTypes.Country, "china");
//....省略身份證上面的其他要素....

ClaimsIdentity id = new ClaimsIdentity("身份證");
id.AddClaim(nameClaim);
id.AddClaim(idClaim);
id.AddClaim(genderClaim);
id.AddClaim(countryClaim);

ClaimsPrincipal principal = new ClaimsPrincipal(id);    

  

上面的代碼展現了一個身份主體的構造過程,但是這個身份主體構造完成之后如何保存到客戶那里呢?

要知道只有保存了這個信息,下次登陸網站的時候拿上這個東西才能訪問到你該訪問到的資源(Authorize)。

在asp.net core中,會將上面的ClaimsPrincipal序列化成一個AuthenticationTicket。也就是一個票根,asp.net core會將這個票據發送給你,當然不是你,而是你的瀏覽器,瀏覽器會幫你妥善保管。

然后,當你再次訪問網站的時候,瀏覽器會自動帶上這個票據(Cookie)去訪問資源。

AuthenticationTicket中有AuthenticationScheme,這個用來表示認證(Authentication)的方式(Scheme:方案)。

比如我們現有的技術有Cookie認證,jwtbear認證、OATH2&openIdConnect等,Scheme作用就是找一個Handler,來實現最終的認證。

這個Handler可能是CookieAuthenticationHandler、JwtbearerHandler等等。還

有一個重要的東西是AuthenticationOptions,這個用來配置Scheme,並且使用option模式(具體來說,就是這樣的:services.Configure(Action(options)))進行配置,然后到某一步需要這個option呢,就在構造函數中注入一個IOption<Toption>的東西來進行注入配置。

 

轉自:https://www.bbsmax.com/A/MAzAOxDq59/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM