ASP.NET Core2-基于策略的Azure AD安全

时间:2019-05-05 16:45:47

标签: c# azure-active-directory asp.net-core-2.2

我正在尝试使用此处的参考来实现基于策略的权限:

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;
    }
}

错误

'ConsumerWebCore.Filters.ExperienceHandler'不能在通用类型或方法'ServiceCollectionServiceExtensions.AddSingleton(IServiceCollection)'中用作类型参数'TImplementation'。没有从'ConsumerWebCore.Filters.ExperienceHandler'到'Microsoft.AspNetCore.Authentication.IAuthenticationHandler'的隐式引用转换。 ConsumerWebCore

1 个答案:

答案 0 :(得分:1)

我认为您打算将其注册为IAuthorizationHandler。

services.AddSingleton<IAuthorizationHandler, ExperienceHandler>();

这是授权处理程序,而不是身份验证处理程序。