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