ASP.NET Core 授权详解

在ASP.NET Core中,授权(Authorization)是控制对应用资源的访问的过程,它决定了哪些用户或用户组可以访问特定的资源或执行特定的操作,授权通常与身份验证(Authentication)一起使用,但两者相互独立,身份验证是确定用户身份的过程,而授权则是根据用户的身份决定其权限。
一、授权类型
1、简单授权:通过[Authorize]属性及其各种参数控制,限制仅允许经过身份验证的用户访问特定组件。
[Authorize]
public IActionResult Info()
{
return View();
}
2、基于角色的授权:创建标识时,它可能属于一个或多个角色,Tracy可能属于Admin和User角色,而Scott只属于User角色,如何创建和管理这些角色取决于授权过程的后备存储。
[Authorize(Roles = "admin,user")]
public IActionResult Info()
{
return View();
}
3、基于策略的授权:创建标识后,可为其分配一个或多个由受信任方颁发的声明,声明是一个名称值对,表示使用者是什么,而不是使用者可以做什么。
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("AdminPolicy", policyBuilder =>
{
policyBuilder.RequireRole("admin");
});
});
[Authorize(Policy = "AdminPolicy")]
public IActionResult Info()
{
return View();
}
4、基于自定义策略的授权:在底层,基于角色的授权和基于声明的授权均使用要求、要求处理程序和预配置的策略,这些构建基块支持代码中的授权评估的表达式。

builder.Services.AddAuthorization(options =>
{
options.AddPolicy("PermissionPolicy", policyBuilder =>
{
policyBuilder.Requirements.Add(new PermissionRequirement());
});
});
二、授权原理
ASP.NET Core的授权系统主要由以下几个部分组成:
1、IAuthorizationRequirement:一项没有方法的标记服务以及用于跟踪授权是否成功的机制,每个IAuthorizationHandler负责检查是否满足要求。
2、IAuthorizationHandler:实现此接口的服务将提供逻辑来确定是否满足IAuthorizationRequirement,如果满足,则调用IAuthorizationContext的Succeed方法;如果不满足,则调用Fail方法。
3、AuthorizationMiddleware:这是一个中间件,用于处理HTTP请求的授权,它会调用IAuthorizationService来评估授权策略,并根据评估结果决定是否继续处理请求。
三、单元表格
| 特性 | 描述 | 示例代码 |
| AuthorizeAttribute | 限制仅允许经过身份验证的用户访问特定组件 | [Authorize] |
| AllowAnonymousAttribute | 绕过授权语句,即使控制器级别应用了[Authorize]属性 | [AllowAnonymous] |
| Roles | 指定用户可以访问的角色 | [Authorize(Roles = "admin,user")] |
| Policy | 指定用户可以访问的策略 | [Authorize(Policy = "AdminPolicy")] |
| AuthenticationSchemes | 指定用户可以访问的身份认证方案 | [Authorize(AuthenticationSchemes = "Cookies")] |
四、问题与解答
Q1: 如何在ASP.NET Core中实现基于角色的授权?

A1: 在ASP.NET Core中,可以通过在控制器或操作上使用[Authorize(Roles = "admin,user")]属性来实现基于角色的授权,这表示只有具有admin或user角色的用户才能访问该组件。
Q2: 如何在ASP.NET Core中实现基于策略的授权?
A2: 在ASP.NET Core中,可以通过在Startup.cs文件中配置授权策略,并在控制器或操作上使用[Authorize(Policy = "AdminPolicy")]属性来实现基于策略的授权,首先需要定义授权策略,然后在需要的地方应用该策略。
以上内容就是解答有关“asp.net core 授权”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。