在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中文網其他相關文章!