gpt4 book ai didi

asp.net-core - 在 ASP.Net Identity 中使用声明而不是策略进行授权

转载 作者:行者123 更新时间:2023-12-05 02:08:00 28 4
gpt4 key购买 nike

我必须根据“ key ”和“门”的存在来迁移具有自定义授权的应用程序。基本上,一些 key 被分配给一个用户,并且该用户不能根据他得到的 key 做事/开门。

显而易见的解决方案是转向 ASP.Net Core Identity 的基于声明的授权。每个 key 都成为一个声明。关键是我想直接检查是否存在开门 claim ,而不是保单。这是为了避免编写(很多,因为有数百个键)代码。

所以,来自:

Startup.cs:
options.AddPolicy("Key1", policy => policy.RequireClaim("Key1"));
Controller:
[Authorize(Policy = "Key1")]

类似于:

Controller:
[Authorize(Claim = "Key1")]

实现此目标的最佳方法是什么?

最佳答案

推荐方式是使用Policy based authorization,可以点击here进行类似的讨论。

您可以使用自定义授权过滤器来满足您的要求,如果您只是检查用户声明中是否存在声明类型,您可以尝试以下代码示例:

ClaimRequirementFilter.cs:

public class ClaimRequirementFilter : IAuthorizationFilter
{
readonly Claim _claim;

public ClaimRequirementFilter(Claim claim)
{
_claim = claim;
}

public void OnAuthorization(AuthorizationFilterContext context)
{
var hasClaim = context.HttpContext.User.Claims.Any(c => c.Type == _claim.Type);
if (!hasClaim)
{
context.Result = new ForbidResult();
}
}
}

ClaimRequirementAttribute.cs:

public class ClaimRequirementAttribute : TypeFilterAttribute
{
public ClaimRequirementAttribute(string claimType ) : base(typeof(ClaimRequirementFilter))
{
Arguments = new object[] { new Claim(claimType , "") };
}
}

然后像这样使用:

[ClaimRequirement("key")]

如果您还需要限制声明的值(value),您可以按照above link中的代码示例进行操作.

关于asp.net-core - 在 ASP.Net Identity 中使用声明而不是策略进行授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61302634/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com