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>的東西來進行註入配置。很靈活哦。這只是冰山一角,要吧這個故事全部講述完,需要太長的時間和精力了。有時間再進行補充。
asp.net core認證和授權的初始認識--claim、claimsidentity、claimsprincipal