【发布时间】:2019-03-05 16:49:30
【问题描述】:
我在 ASP.NET Core 2.2 中使用基于声明的身份
根据我的阅读,可以使用以下格式进行自定义声明/策略授权(在this 答案中找到)
[Authorize(Policy = "DataDrivenExample")]
public IActionResult GetFooBar()
{
// Omitted for brevity...
}
但是,在我的应用程序中,我需要检查用户是否有权访问此特定对象。例如,像这样:
[Authorize(Policy = "EditFooBar:" + id)]
public IActionResult EditFooBar(string id)
{
// Omitted for brevity...
}
处理程序然后是这样的......?
public class EditFooBarHandler : AuthorizationHandler<DataDrivenRequirement>
{
protected override void Handle(AuthorizationContext context,
string id)
{
var hasClaim = context.HttpContext.User.Claims.Any(c => c.Type == "EditFooBar" && c.Value == id);
...etc...
}
为id 的每个可能值制定单独的策略是不可行的。
基本上,我怎样才能将数据传递到一个策略要求检查器,该检查器对于对该 API 端点的每个请求都不同?
【问题讨论】:
-
首先,声明不应该是权限。声明通常是很少更改的内容(姓名、姓氏、电子邮件、生日等),您的政策将更多地基于案例而不是权限(即“PlaceOrder”、“ManageUsers”等而不是“删除用户”, “读取用户”、“编辑用户”)。要(ab)使用 ACL 声明,请参阅this answer
标签: c# asp.net-core claims-based-identity