首页 > 解决方案 > .NET CORE 身份验证策略或

问题描述

我想对政策使用 or 声明

例如

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

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

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

如果令牌中没有范围和用户角色,这可能吗?

标签: .net.net-corejwt

解决方案


编辑:没有看到 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


推荐阅读