.NET CORE身份验证策略或

时间:2018-10-18 18:06:16

标签: .net .net-core jwt

我想对政策使用or语句

例如

当具有角色或具有范围的API的用户尝试访问时,我的控制器应该可以访问;

options.AddPolicy("Api", policy => policy.RequireClaim("scope", "api01"));

options.AddPolicy("Admin", policy => policy.RequireRole("admin"));

在令牌中既没有作用域又没有用户角色的可能吗?

1 个答案:

答案 0 :(得分:0)

编辑:没有看到OR。因此,按照我的看法,您可以使用自定义处理程序要求来解决它。例如,您可以创建以下类

public class Api01ScopeRequirement : IAuthorizationRequirement
{
    public Api01ScopeRequirement()
    {
    }
}

public class CustomAuthHandler : AuthorizationHandler<Api01ScopeRequirement>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
                                                   Api01ScopeRequirement requirement)
    {
        if (context.User.HasClaim(c => c.Type == "api01") || context.User.IsInRole("Admin"))
        {
            context.Succeed(requirement);
        }

        return Task.CompletedTask;
    }
}

在启动时,您可以添加

services.AddAuthorization(options =>
{
    options.AddPolicy("Api01Scope", policy =>
      policy.Requirements.Add(new Api01ScopeRequirement()));
});

请参阅https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-2.1,以获取更多参考。