首頁 >後端開發 >C++ >如何使用索賠中的ASP.NET Core中實現自定義授權?

如何使用索賠中的ASP.NET Core中實現自定義授權?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-02-01 18:16:10287瀏覽

How to Implement Custom Authorization in ASP.NET Core Using Claims?

在ASP.NET Core中使用聲明實現自定義授權屬性

背景

ASP.NET Core 的 AuthorizeAttribute 提供了一種基於聲明授權操作的便捷方法。然而,在之前的版本中,您可以重寫 bool AuthorizeCore(HttpContextBase httpContext) 來實現自定義授權邏輯。此方法在 AuthorizeAttribute 中不再存在。

使用策略的當前方法

ASP.NET Core 團隊建議使用策略進行自定義授權。以下是流程:

  1. Startup.cs 中定義策略:

    <code class="language-csharp"> options.AddPolicy("YourPolicyName", policy => policy.RequireClaim(...));</code>
  2. [Authorize] 屬性添加到您的操作或控制器:

    <code class="language-csharp"> [Authorize(Policy = "YourPolicyName")]
     public IActionResult Action(...)</code>

使用聲明的自定義授權屬性

如果基於策略的方法不適用,您可以使用 IAuthorizationFilter 接口創建一個自定義 AuthorizeAttribute

<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)
    {
        bool 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>

通過在您的過濾器中實現 OnAuthorization 方法,您可以根據聲明指定授權邏輯。

以上是如何使用索賠中的ASP.NET Core中實現自定義授權?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn