ASP.NET Core 的 AuthorizeAttribute
提供了一種基於聲明授權操作的便捷方法。然而,在之前的版本中,您可以重寫 bool AuthorizeCore(HttpContextBase httpContext)
來實現自定義授權邏輯。此方法在 AuthorizeAttribute
中不再存在。
ASP.NET Core 團隊建議使用策略進行自定義授權。以下是流程:
在 Startup.cs
中定義策略:
<code class="language-csharp"> options.AddPolicy("YourPolicyName", policy => policy.RequireClaim(...));</code>
將 [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中文網其他相關文章!