【发布时间】:2020-02-12 10:29:49
【问题描述】:
我正在尝试设置一个授权策略,我可以使用它来装饰 .net core 3.1 中 API 控制器中的操作。我一直在关注这些例子: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/resourcebased?view=aspnetcore-3.1
如果我有一个像下面这样装饰的 API 操作,我的代码没有命中处理程序的 handlerequirementAsync 方法,并且我从 swagger 收到 403 Forbidden 响应。如果我从处理程序/需求中删除文档模型,它确实有效。我做错了什么还是 api 请求不支持?
这是其他相关代码:
public class DocumentAuthorizationHandler :
AuthorizationHandler<SameAuthorRequirement, Document>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
SameAuthorRequirement requirement,
Document resource)
{
if (context.User.Identity?.Name == resource.Author)
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
}
public class SameAuthorRequirement : IAuthorizationRequirement { }
[Authorize(Policy = "EditPolicy")]
public async Task<FileResult> RetreiveFile([FromRoute]Document model)
{
}
services.AddAuthorization(options =>
{
options.AddPolicy("EditPolicy", policy =>
policy.Requirements.Add(new SameAuthorRequirement()));
});
services.AddSingleton<IAuthorizationHandler, DocumentAuthorizationHandler>();
【问题讨论】:
-
Startup.cs中的配置是什么?如果您希望社区审查并调试代码,请出示可以重现问题的相关代码。这个github issuegithub.com/aspnet/AspNetCore.Docs/issues/14944可能有帮助,可以参考一下。 -
您好,感谢您的反馈。我的代码完全反映了链接中 Microsoft 文档中基于资源的授权示例。为了清楚起见,我将代码放入问题中
标签: api asp.net-core declarative-authorization resource-based-authorization