我想对政策使用or语句
例如
当具有角色或具有范围的API的用户尝试访问时,我的控制器应该可以访问;
options.AddPolicy("Api", policy => policy.RequireClaim("scope", "api01"));
options.AddPolicy("Admin", policy => policy.RequireRole("admin"));
在令牌中既没有作用域又没有用户角色的可能吗?
答案 0 :(得分:0)
编辑:没有看到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,以获取更多参考。