首頁 > 後端開發 > C++ > 如何在ASP.NET Core中創建自定義授權屬性?

如何在ASP.NET Core中創建自定義授權屬性?

DDD
發布: 2025-02-01 18:11:10
原創
473 人瀏覽過

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 接口,它允許您插入自定義過濾器以強制執行聲明要求。以下代碼演示了一個示例:

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

通過使用此自定義屬性,您可以為特定的控制器或操作聲明要求,如下例所示:

[Route("api/resource")]
public class MyController : Controller
{
    [ClaimRequirement(MyClaimTypes.Permission, "CanReadResource")]
    [HttpGet]
    public IActionResult GetResource()
    {
        return Ok();
    }
}
登入後複製

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

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