c# - 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”到“Microsoft.AspNetCore.Authentication.IAuthenticationHandler”的隐式引用转换。消费者网络核心
解决方案
我认为您打算将其注册为 IAuthorizationHandler。
services.AddSingleton<IAuthorizationHandler, ExperienceHandler>();
It's an authorization handler, not an authentication handler.
推荐阅读
- r - 返回整数而不是名称的箱线图名称
- kubernetes - 如何设置/更改 kuberenetes 集群中节点的内部 ip?
- python - 无论如何在我的函数中使用较少的 if 语句?
- symfony - 重命名 SonataUserUser 实体后,无法为命名路由“admin_app_sonatauseruser_create”生成 URL
- node.js - 通过钩子反应生成静态页面
- javascript - 如何在反应中管理具有选中值的单选按钮
- pandas - 根据条件添加行并创建和更新新列
- android - 单个应用程序中的多个 react-native 实例导致触摸事件问题
- c# - 在 C# ListView Checkbox 中使用数据绑定获取 CheckBox 内容
- database - 在 Oracle 中打破两个财务年度日期