首页 > 解决方案 > ASP.NET Core2 - 基于策略的 Azure AD 安全

问题描述

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

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”到“M​​icrosoft.AspNetCore.Authentication.IAuthenticationHandler”的隐式引用转换。消费者网络核心

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

解决方案


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

services.AddSingleton<IAuthorizationHandler, ExperienceHandler>();

It's an authorization handler, not an authentication handler.


推荐阅读