ASP.NET授权详解

一、
在ASP.NET Core中,授权(Authorization)是控制对应用资源访问的过程,它决定了哪些用户或用户组可以访问特定的资源或执行特定的操作,授权通常与身份验证(Authentication)一起使用,身份验证是验证用户身份的过程,而授权则是确定经过身份验证的用户是否有权限执行特定操作的过程。
二、授权类型
简单授权
简单授权通过[Authorize]属性及其各种参数来控制,在其最基本的形式中,通过向控制器、操作或Razor Page应用[Authorize]属性,可限制为仅允许经过身份验证的用户访问该组件。
[Authorize]
public IActionResult Info()
{
return View();
}
这样,只有经过身份验证的用户才能访问这些资源。
基于角色的授权
基于角色的授权允许你根据用户的角色来授予或拒绝访问权限,创建标识时,它可能属于一个或多个角色,Tracy可能属于Admin和User角色,而Scott只属于User角色,如何创建和管理这些角色取决于授权过程的后备存储。
使用基于角色的授权时,可以通过[Authorize(Roles = "admin,user")]来指定允许访问的角色。
[Authorize(Roles ="admin,user")]
public IActionResult Info()
{
return View();
}
这样,仅当用户为admin或user角色成员时才可访问Info方法。

基于策略的授权
基于声明的策略授权允许你根据用户的声明来授予或拒绝访问权限,声明是一个名称值对,表示使用者是什么,而不是使用者可以做什么。
你可以配置策略并使用它们进行授权。
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("AdminPolicy", policyBuilder =>
{
policyBuilder.RequireRole("admin");
});
});
在控制器或操作中使用策略进行授权:
[Authorize(Policy = "AdminPolicy")]
public IActionResult Info()
{
return View();
}
这样,仅当用户符合AdminPolicy策略时才可访问Info方法。
三、自定义策略的授权
在底层,基于角色的授权和基于声明的授权均使用要求、要求处理程序和预配置的策略,这些构建基块支持代码中的授权评估的表达式,其结果为一个更丰富、可重用且可测试的授权结构。
你可以定义自己的授权要求和处理程序来实现自定义的授权逻辑。
public class PermissionRequirement : IAuthorizationRequirement
{
}
public class PermissionHandler : AuthorizationHandler<PermissionRequirement>
{
protected override Task HandleRequirement(AuthorizationHandlerContext context, PermissionRequirement requirement)
{
// 在这里编写你的授权逻辑
return Task.CompletedTask;
}
}
然后在服务配置中添加自定义的授权要求和处理程序:

builder.Services.AddAuthorization(options =>
{
options.AddPolicy("PermissionPolicy", policyBuilder =>
{
policyBuilder.Requirements.Add(new PermissionRequirement());
});
});
在控制器或操作中使用自定义策略进行授权:
[Authorize(Policy = "PermissionPolicy")]
public IActionResult Info()
{
return View();
}
这样,你就可以实现复杂的自定义授权逻辑。
四、归纳
ASP.NET Core提供了灵活且强大的授权机制,包括简单授权、基于角色的授权和基于策略的授权,通过合理地使用这些授权机制,你可以有效地控制对应用资源的访问,确保应用的安全性,你还可以根据需要自定义授权逻辑,以满足特定的业务需求。
到此,以上就是小编对于“asp.net 授权”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。