【问题标题】:How to check claim for value in API request (ASP.NET Core 2.2)如何检查 API 请求中的价值声明 (ASP.NET Core 2.2)
【发布时间】: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


【解决方案1】:

我相信您在这种情况下正在寻找的是基于资源的授权。

https://docs.microsoft.com/en-us/aspnet/core/security/authorization/resourcebased?view=aspnetcore-2.2

【讨论】:

    猜你喜欢
    • 2020-08-22
    • 2019-01-19
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多