我正在尝试使用此处的参考来实现基于策略的权限:
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
答案 0 :(得分:1)
我认为您打算将其注册为IAuthorizationHandler。
services.AddSingleton<IAuthorizationHandler, ExperienceHandler>();
这是授权处理程序,而不是身份验证处理程序。