Политика аутентификации .NET CORE ИЛИ - PullRequest
0 голосов
/ 18 октября 2018

Я хотел бы использовать оператор или для политики

Например

Мой контроллер должен быть доступен, когда пользователь с ролью ИЛИ API с областью действия пытается получить доступ;

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

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

возможно ли это без наличия области действия и роли пользователя в токене?

1 Ответ

0 голосов
/ 18 октября 2018

РЕДАКТИРОВАТЬ: не видел ИЛИ.Итак, как я вижу, вы можете решить это, используя требования к пользовательскому обработчику.Например, вы можете создать следующие классы

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 для дальнейшего использования.

...