最近一直在學習研究認證受權這一塊,從AspNetCore的Security解決方案,到Identity,再到OAuth2.0、OpenIdConnect協議,而後IdentityServer4,這一塊的東西十分多並且複雜,能夠算是DotNet裏最難啃的骨頭之一了。計劃作個認證受權的系列,藉由分析源碼來學習、記錄和加深對這一塊的理解。微信
如圖是AspNetCore.Security解決方案的項目結構。網絡
能夠看到主要有5個解決方案文件夾架構
最主要的是Authentication和Authorization這兩個裏面的內容。框架
初次接觸這一塊,可能會比較懵,啥玩意兒啊,倆單詞長得差很少像念繞口令的。學習
我嘗試大白話解釋下。測試
Authentication(認證):who are you。系統獲知當前用戶身份的過程就叫認證。能夠類比成身份證。一般來講,在你登陸的時候,系統就知道了你的身份,而後將當前用戶信息加密後存儲在Cookie中來維持登陸態。加密
Authorization(受權):are you allowed。受權就是判斷你有沒有權限,好比網管拿着你身份證一看,你這不行,未滿十八歲,不能在我這上網。而有的黑網吧是沒有這個要求的,給錢就能玩。正經網吧和黑網吧,這就是須要受權資源和匿名資源的區別。翻譯
咱們能夠看到第三個文件夾叫Core,裏面只有一個項目叫Microsoft.AspNetCore.Authentication,是咱們使用DotNet受權框架必須引用的一個核心類庫。中間件
而後其餘的Certificate、Cookies、OAuth、OpenIdConnect等這些,在DotNet裏叫作Schema,能夠翻譯爲架構。這就比如,證實身份的方式有不少種,身份證、護照、戶口本均可以,同理網絡世界也有各類各樣的協議。最多見傳統的是方式是使用Cookie,也可使用無狀態的JwtBear,如今常見的微信、QQ等掃碼登陸是使用的OAuth協議。blog
受權就兩個項目,[Microsoft.AspNetCore.Authorization.Policy],[Microsoft.AspNetCore.Authorization]。多看看源碼的話,應該對Policy這個詞很熟悉了,在DotNet裏面屬於高頻詞彙,意思是策略。這兩個項目容許設置不一樣的受權策略/規則,來實現高度靈活的受權方案。