如何检查 API 请求中的价值声明(ASP.NET Core 2.2)

How to check claim for value in API request (ASP.NET Core 2.2)

我在 ASP.NET Core 2.2

中使用基于声明的身份

据我了解,可以使用以下格式进行自定义 claims/policy 授权(在 答案中找到)

[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 端点的每个请求都不同的策略要求检查器?

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

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