ASP.NET具有[Allow Anonymous]
属性,该属性使您可以绕过特定端点上的授权。我想知道是否存在一种通用方法,可以在每个端点的基础上启用特定的身份验证方案。
想象一下您想支持不同的方案,例如Basic
方案和Bearer
方案等等。但是您不想在所有端点上都支持所有方案。似乎很方便的方法是创建[BasicAuth]和[BearerAuth]之类的属性,以便您可以注释要启用的特定端点。然而,从AuhtorizationAttributes的工作原理来看,它们看起来像是逻辑AND,而不是逻辑OR。
例如,如果我用[BasicAuth]和[BearerAuth]注释了一个端点,并且在False
上返回了IsAuthorized
,那么整个事情就会失败。这使我觉得我是在错误的地方寻找东西,还是有一个不常见的用例。
我看错了方向吗?
答案 0 :(得分:0)
AuthorizationAttribute
支持不同类型的授权。它可以用于支持Policies
或Roles
。如果您希望使用OR逻辑,则可以将授权属性与逗号分隔的字符串一起用于角色。这将使您的端点可以被这些角色访问。
将其用于OR逻辑:
[Authorize(Roles = "HRManager,Finance")]
public class SalaryController : Controller
{
}
对于AND逻辑
[Authorize(Roles = "PowerUser")]
[Authorize(Roles = "ControlPanelUser")]
public class ControlPanelController : Controller
{
}
我建议您通读整个Authorization文档。