Asp.NET Core 中的 認證授權 詳解和使用
Asp.NET Core 中的 認證授權 詳解和使用 - 醉馬踏千秋 - 博客園 https://www.cnblogs.com/abc1069/p/16058146.html
什么是 驗證 和 授權?
身份驗證(authentication):是確定用戶身份的過程
授權(authorization ):是確定用戶(已經(jīng)驗證成功的用戶)是否有權訪問資源的過程。
身份驗證
職責:
-
對用戶進行身份驗證。
-
在未經(jīng)身份驗證的用戶試圖訪問受限資源時作出響應。
現(xiàn)在,我們對一個 action 方法上添加 authorize 特性,這表明我們對這個接口進行了授權:
[HttpGet]
[Authorize]
public IEnumerable Get(){
return new string[] {"數(shù)據(jù)1", "數(shù)據(jù)2"};
}
如果我們直接訪問這個接口,會報如下錯誤:

意思是:你定義了授權,但沒有指定任何(包括自定義和官方的) 身份驗證方案;
授權Authorization 和 認證Authentication 是相輔相成的;兩者缺一不可。
解決的方法,其實報錯信息已經(jīng)告訴你了;即:添加認證方案的支持,其實,認證方案有很多,但是現(xiàn)在主要推薦的還是 Jwt Bearer 身份驗證方案:
1、Nuget 中安裝 Microsoft.AspNetCore.Authentication.JwtBearer 包;
2、然后再 ConfigurationServices 中添加對 身份驗證的方案(包括使用什么方案,這個方案需要做什么樣子的配置) 做注入容器中處理:

提醒:根據(jù)報錯信息,他有兩種寫法,

下面是第二種:

401 Unauthorized:未經(jīng)授權,身份認證不通過,未認證,可能:無令牌,令牌無效、失效(因為你沒有使用有效的token,無法通過 身份認證 Authentication)
403 Forbidden:被禁止,即:令牌通過,但是你無權限。
授權
上面例子中,我么用 authorize 這個特性作用于一個 action 方法上了,這就是授權,對這個action進行了權限限制;
但是,這種簡單的授權,是只要有效的token(即:身份驗證通過),就能訪問這個接口,而沒有精細化處理(就好比:董事長有這權限、行政也有著權限、而員工沒有這權限);
asp.net core 的授權分三種
1、普通的授權(上面已經(jīng)講了)
2、基于角色的授權
3、基于策略的授權
