首頁 > 後端開發 > C++ > 如何使用策略和IauthorizationFilter在ASP.NET核心中創建自定義授權屬性?

如何使用策略和IauthorizationFilter在ASP.NET核心中創建自定義授權屬性?

Linda Hamilton
發布: 2025-02-01 18:06:14
原創
186 人瀏覽過

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文件中,您可以註冊自定義策略並將它們與特定要求關聯。例如:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthorization(options =>
    {
        options.AddPolicy("RequireAge18", policy => policy.RequireClaim(MyClaimTypes.Age, "18"));
    });
}
登入後複製

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

[Authorize(Policy = "RequireAge18")]
public class MyController : Controller { }
登入後複製

替代方法:IAuthorizationFilter

但是,對於更簡單的場景,IAuthorizationFilter接口提供了一種實現自定義授權邏輯的方法。您可以定義一個從TypeFilterAttribute繼承並指定自定義篩選器的新屬性:

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();
        }
    }
}
登入後複製

然後,您可以將您的屬性用於操作或控制器:

[ClaimRequirement(MyClaimTypes.Permission, "CanReadResource")]
[HttpGet]
public IActionResult GetResource() { return Ok(); }
登入後複製

總結

根據您的具體需求,ASP.NET Core 提供了兩種創建自定義授權屬性的方法:策略和IAuthorizationFilter接口。選擇最符合您應用程序需求的方法。

以上是如何使用策略和IauthorizationFilter在ASP.NET核心中創建自定義授權屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板