.net - .NET CORE 身份验证策略或
问题描述
我想对政策使用 or 声明
例如
当具有角色的用户或具有范围的 API 尝试访问时,我的控制器应该可以访问;
options.AddPolicy("Api", policy => policy.RequireClaim("scope", "api01"));
options.AddPolicy("Admin", policy => policy.RequireRole("admin"));
如果令牌中没有范围和用户角色,这可能吗?
解决方案
编辑:没有看到 OR。因此,按照我的看法,您可以通过使用自定义处理程序要求来解决它。例如,您可以创建以下类
public class Api01ScopeRequirement : IAuthorizationRequirement
{
public Api01ScopeRequirement()
{
}
}
public class CustomAuthHandler : AuthorizationHandler<Api01ScopeRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
Api01ScopeRequirement requirement)
{
if (context.User.HasClaim(c => c.Type == "api01") || context.User.IsInRole("Admin"))
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
}
在您的启动中,您可以添加
services.AddAuthorization(options =>
{
options.AddPolicy("Api01Scope", policy =>
policy.Requirements.Add(new Api01ScopeRequirement()));
});
有关进一步参考,请参阅https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-2.1。
推荐阅读
- r - 如何将秒转换为R中的日期
- c# - 如何读取/写入超过 2 GB 大小障碍的文件?
- c# - 如何通过 codefirst 迁移更快地在控制器中手动生成数据库表?
- android - 当我单击手机的后退按钮时,“无法将 java.lang.String 类型的对象转换为类型”
- c# - WPF WebView 不显示任何内容
- laravel - hasMany 关系返回未定义的属性
- swift - 来自 Firebase 的 Swift 4 Unwrapping Dictionary
- responsive - Big Commerce Dropdown 响应性问题
- matlab - MATLAB R2017b。NARX 神经网络 - 输入信号和网络输入的数量不匹配
- javascript - 反应属性消失