Asp.NET Core 中的 认证授权 详解和使用
Asp.NET Core 中的 认证授权 详解和使用 - 醉马踏千秋 - 博客园 https://www.cnblogs.com/abc1069/p/16058146.html
什么是 验证 和 授权?
身份验证(authentication):是确定用户身份的过程
授权(authorization ):是确定用户(已经验证成功的用户)是否有权访问资源的过程。
身份验证
职责:
-
对用户进行身份验证。
-
在未经身份验证的用户试图访问受限资源时作出响应。
现在,我们对一个 action 方法上添加 authorize 特性,这表明我们对这个接口进行了授权:
[HttpGet]
[Authorize]
public IEnumerable Get(){
return new string[] {"数据1", "数据2"};
}
如果我们直接访问这个接口,会报如下错误:
意思是:你定义了授权,但没有指定任何(包括自定义和官方的) 身份验证方案;
授权Authorization 和 认证Authentication 是相辅相成的;两者缺一不可。
解决的方法,其实报错信息已经告诉你了;即:添加认证方案的支持,其实,认证方案有很多,但是现在主要推荐的还是 Jwt Bearer 身份验证方案:
1、Nuget 中安装 Microsoft.AspNetCore.Authentication.JwtBearer 包;
2、然后再 ConfigurationServices 中添加对 身份验证的方案(包括使用什么方案,这个方案需要做什么样子的配置) 做注入容器中处理:
提醒:根据报错信息,他有两种写法,
下面是第二种:
401 Unauthorized:未经授权,身份认证不通过,未认证,可能:无令牌,令牌无效、失效(因为你没有使用有效的token,无法通过 身份认证 Authentication)
403 Forbidden:被禁止,即:令牌通过,但是你无权限。
授权
上面例子中,我么用 authorize 这个特性作用于一个 action 方法上了,这就是授权,对这个action进行了权限限制;
但是,这种简单的授权,是只要有效的token(即:身份验证通过),就能访问这个接口,而没有精细化处理(就好比:董事长有这权限、行政也有着权限、而员工没有这权限);
asp.net core 的授权分三种
1、普通的授权(上面已经讲了)
2、基于角色的授权
3、基于策略的授权