首页 > 后端开发 > C++ > 如何使用索赔中的ASP.NET Core中实现自定义授权?

如何使用索赔中的ASP.NET Core中实现自定义授权?

Mary-Kate Olsen
发布: 2025-02-01 18:16:10
原创
336 人浏览过

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 中定义策略:

     options.AddPolicy("YourPolicyName", policy => policy.RequireClaim(...));
    登录后复制
  2. [Authorize] 属性添加到您的操作或控制器:

     [Authorize(Policy = "YourPolicyName")]
     public IActionResult Action(...)
    登录后复制

使用声明的自定义授权属性

如果基于策略的方法不适用,您可以使用 IAuthorizationFilter 接口创建一个自定义 AuthorizeAttribute

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();
        }
    }
}
登录后复制

使用方法示例:

[Route("api/resource")]
public class MyController : Controller
{
    [ClaimRequirement(MyClaimTypes.Permission, "CanReadResource")]
    [HttpGet]
    public IActionResult GetResource()
    {
        return Ok();
    }
}
登录后复制

通过在您的过滤器中实现 OnAuthorization 方法,您可以根据声明指定授权逻辑。

以上是如何使用索赔中的ASP.NET Core中实现自定义授权?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板