【问题标题】:.NET CORE Authentication Policy OR.NET CORE 身份验证策略或
【发布时间】:2019-03-23 14:51:13
【问题描述】:

我想对政策使用 or 语句

例如

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

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

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

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

【问题讨论】:

    标签: .net .net-core jwt


    【解决方案1】:

    编辑:没有看到 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 以获取更多参考。

    【讨论】:

      猜你喜欢
      • 2020-07-03
      • 2019-06-12
      • 2018-12-17
      • 2020-10-28
      • 2020-10-15
      • 1970-01-01
      • 2017-06-26
      • 2017-05-20
      • 1970-01-01
      相关资源
      最近更新 更多