ASP.NET Core2 - безопасность Azure AD на основе политик - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь реализовать разрешения на основе политик, используя ссылку здесь:

https://msdn.microsoft.com/en-us/magazine/mt826337.aspx

Это новый проект .NetCore2, и я понятия не имею, что означает ошибка. Я попытался добавить .AddTransient или .AddScoped безрезультатно.

Раздел конфигурации запуска

    services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
        .AddAzureAD(options => Configuration.Bind("AzureAd", options));
        services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        services.AddAuthorization(options =>
        {
            options.AddPolicy("AtLeast3Years",
              policy => policy
                .Requirements
                .Add(new ExperienceRequirement(3)));
        });

        services.AddSession();

        services.AddEditor();

        services.AddSingleton<IAuthenticationHandler, ExperienceHandler>();

Требование

public class ExperienceRequirement : IAuthorizationRequirement
{
    public int Years { get; private set; }

    public ExperienceRequirement(int minimumYears)
    {
        Years = minimumYears;
    }
}

Обработчик

public class ExperienceHandler : AuthorizationHandler<ExperienceRequirement>
{

protected override Task HandleRequirementAsync(
      AuthorizationHandlerContext context,
      ExperienceRequirement requirement)
    {
        context.Succeed(requirement);

        return Task.CompletedTask;
    }
}

Error

«ConsumerWebCore.Filters.ExperienceHandler» нельзя использовать в качестве параметра типа «TImplementation» в универсальном типе или методе «ServiceCollectionServiceExtensions.AddSingleton (IServiceCollection)». Не существует неявного преобразования ссылок из ConsumerWebCore.Filters.ExperienceHandler в Microsoft.AspNetCore.Authentication.IAuthenticationHandler. ConsumerWebCore

1 Ответ

1 голос
/ 06 мая 2019

Я думаю, вы хотели зарегистрировать его как IAuthorizationHandler.

services.AddSingleton<IAuthorizationHandler, ExperienceHandler>();

Это обработчик авторизации, а не обработчик аутентификации.

...