­

AspNetCore3.1_Secutiry源碼解析_1_目錄

  • 2020 年 3 月 18 日
  • 筆記

文章目錄

  • AspNetCore3.1_Secutiry源碼解析_1_目錄
  • AspNetCore3.1_Secutiry源碼解析_2_Authentication_核心項目
  • AspNetCore3.1_Secutiry源碼解析_3_Authentication_Cookies
  • AspNetCore3.1_Secutiry源碼解析_4_Authentication_JwtBear
  • AspNetCore3.1_Secutiry源碼解析_5_Authentication_OAuth
  • AspNetCore3.1_Secutiry源碼解析_6_Authentication_OpenIdConnect
  • AspNetCore3.1_Secutiry源碼解析_7_Authentication_其他
  • AspNetCore3.1_Secutiry源碼解析_8_Authorization_核心項目
  • AspNetCore3.1_Secutiry源碼解析_9_Authorization_Policy

概述

最近一直在學習研究認證授權這一塊,從AspNetCore的Security解決方案,到Identity,再到OAuth2.0、OpenIdConnect協議,然後IdentityServer4,這一塊的東西十分多而且複雜,可以算是DotNet里最難啃的骨頭之一了。計劃做個認證授權的系列,藉由分析源碼來學習、記錄和加深對這一塊的理解。

如圖是AspNetCore.Security解決方案的項目結構。

可以看到主要有5個解決方案文件夾

  • Authentication:認證
  • Authorization:授權
  • CookiePolicy:Cookie策略中間件
  • _dependencies:依賴項目
  • benchmarks:測試項目

最主要的是Authentication和Authorization這兩個裏面的內容。

image

什麼是Authentication, 什麼是Authorization

初次接觸這一塊,可能會比較懵,啥玩意兒啊,倆單詞長得差不多像念繞口令的。

我嘗試大白話解釋下。

Authentication(認證):who are you。系統獲知當前用戶身份的過程就叫認證。可以類比成身份證。通常來說,在你登錄的時候,系統就知道了你的身份,然後將當前用戶信息加密後存儲在Cookie中來維持登錄態。

Authorization(授權):are you allowed。授權就是判斷你有沒有權限,比如網管拿着你身份證一看,你這不行,未滿十八歲,不能在我這上網。而有的黑網吧是沒有這個要求的,給錢就能玩。正經網吧和黑網吧,這就是需要授權資源和匿名資源的區別。

Authentication項目簡介

我們可以看到第三個文件夾叫Core,裏面只有一個項目叫Microsoft.AspNetCore.Authentication,是我們使用DotNet授權框架必須引用的一個核心類庫。

然後其他的Certificate、Cookies、OAuth、OpenIdConnect等這些,在DotNet里叫做Schema,可以翻譯為架構。這就好比,證明身份的方式有很多種,身份證、護照、戶口本都可以,同理網絡世界也有各種各樣的協議。最常見傳統的是方式是使用Cookie,也可以使用無狀態的JwtBear,現在常見的微信、QQ等掃碼登錄是使用的OAuth協議。

Authorization項目簡介

授權就兩個項目,[Microsoft.AspNetCore.Authorization.Policy],[Microsoft.AspNetCore.Authorization]。多看看源碼的話,應該對Policy這個詞很熟悉了,在DotNet裏面屬於高頻詞彙,意思是策略。這兩個項目允許設置不同的授權策略/規則,來實現高度靈活的授權方案。