首页 >后端开发 >C++ >如何使用策略和IauthorizationFilter在ASP.NET核心中创建自定义授权属性?

如何使用策略和IauthorizationFilter在ASP.NET核心中创建自定义授权属性?

Linda Hamilton
Linda Hamilton原创
2025-02-01 18:06:14138浏览

How to Create Custom Authorization Attributes in ASP.NET Core Using Policies and IAuthorizationFilter?

在ASP.NET Core中创建自定义AuthorizeAttribute

ASP.NET Core的AuthorizeAttribute允许您为操作或控制器指定授权要求。虽然早期版本提供AuthorizeCore方法,但这种方法已被取代。

当前方法:策略(Policies)

创建自定义授权属性的推荐方法是使用策略。在应用程序的Startup.cs文件中,您可以注册自定义策略并将它们与特定要求关联。例如:

<code class="language-csharp">public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthorization(options =>
    {
        options.AddPolicy("RequireAge18", policy => policy.RequireClaim(MyClaimTypes.Age, "18"));
    });
}</code>

然后,在您的控制器中,您可以使用[Authorize]属性指定策略:

<code class="language-csharp">[Authorize(Policy = "RequireAge18")]
public class MyController : Controller { }</code>

替代方法:IAuthorizationFilter

但是,对于更简单的场景,IAuthorizationFilter接口提供了一种实现自定义授权逻辑的方法。您可以定义一个从TypeFilterAttribute继承并指定自定义筛选器的新属性:

<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
{
    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">[ClaimRequirement(MyClaimTypes.Permission, "CanReadResource")]
[HttpGet]
public IActionResult GetResource() { return Ok(); }</code>

总结

根据您的具体需求,ASP.NET Core 提供了两种创建自定义授权属性的方法:策略和IAuthorizationFilter接口。选择最符合您应用程序需求的方法。

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

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