首页 >后端开发 >C++ >如何在ASP.NET Core中创建自定义授权属性?

如何在ASP.NET Core中创建自定义授权属性?

DDD
DDD原创
2025-02-01 18:11:10438浏览

How to Create Custom Authorization Attributes in ASP.NET Core?

在 ASP.NET Core 中创建自定义授权属性

在早期版本的 ASP.NET Core 中,创建自定义授权属性需要重写 AuthorizeAttribute 中的 bool AuthorizeCore(HttpContextBase httpContext) 方法。然而,这种方法在当前框架版本中已不再适用。

创建自定义 AuthorizeAttribute 的新方法

现在,创建自定义授权属性的推荐方法是使用新的“策略”设计。这种设计使用 [Authorize] 属性来指定策略,该策略可以在应用程序的 Startup.cs 文件中定义。然后,可以将策略链接到特定的代码块,例如确保用户满足某些声明要求。

虽然策略设计提供了灵活性,但它可能并不适用于所有场景,尤其是在只需要简单声明要求时。对于这种情况,自定义解决方案可能更实用。

实现自定义声明要求属性

一种方法是使用 IAuthorizationFilter 接口,它允许您插入自定义过滤器以强制执行声明要求。以下代码演示了一个示例:

<code class="language-csharp">public class ClaimRequirementAttribute : TypeFilterAttribute
{
    public ClaimRequirementAttribute(string claimType, string claimValue) : base(typeof(ClaimRequirementFilter))
    {
        Arguments = new object[] { new Claim(claimType, claimValue) };
    }
}

public class ClaimRequirementFilter : IAuthorizationFilter
{
    private 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 && c.Value == _claim.Value);
        if (!hasClaim)
        {
            context.Result = new ForbidResult();
        }
    }
}</code>

通过使用此自定义属性,您可以为特定的控制器或操作声明要求,如下例所示:

<code class="language-csharp">[Route("api/resource")]
public class MyController : Controller
{
    [ClaimRequirement(MyClaimTypes.Permission, "CanReadResource")]
    [HttpGet]
    public IActionResult GetResource()
    {
        return Ok();
    }
}</code>

以上是如何在ASP.NET Core中创建自定义授权属性?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn