在每个端点上启用特定的身份验证/授权方案

时间:2019-04-19 23:41:08

标签: c# .net asp.net-mvc asp.net-web-api2

ASP.NET具有[Allow Anonymous]属性,该属性使您可以绕过特定端点上的授权。我想知道是否存在一种通用方法,可以在每个端点的基础上启用特定的身份验证方案。

想象一下您想支持不同的方案,例如Basic方案和Bearer方案等等。但是您不想在所有端点上都支持所有方案。似乎很方便的方法是创建[BasicAuth]和[BearerAuth]之类的属性,以便您可以注释要启用的特定端点。然而,从AuhtorizationAttributes的工作原理来看,它们看起来像是逻辑AND,而不是逻辑OR。

例如,如果我用[BasicAuth]和[BearerAuth]注释了一个端点,并且在False上返回了IsAuthorized,那么整个事情就会失败。这使我觉得我是在错误的地方寻找东西,还是有一个不常见的用例。

我看错了方向吗?

1 个答案:

答案 0 :(得分:0)

AuthorizationAttribute支持不同类型的授权。它可以用于支持PoliciesRoles。如果您希望使用OR逻辑,则可以将授权属性与逗号分隔的字符串一起用于角色。这将使您的端点可以被这些角色访问。

将其用于OR逻辑:

[Authorize(Roles = "HRManager,Finance")]
public class SalaryController : Controller
{
}

对于AND逻辑

[Authorize(Roles = "PowerUser")]
[Authorize(Roles = "ControlPanelUser")]
public class ControlPanelController : Controller
{
}

来源是Role-based authorization


我建议您通读整个Authorization文档。