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

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

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

下面是第二種:

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