首页 > 后端开发 > C++ > 如何在ASP.NET Core中创建自定义授权属性?

如何在ASP.NET Core中创建自定义授权属性?

DDD
发布: 2025-02-01 18:11:10
原创
472 人浏览过

How to Create Custom Authorization Attributes in ASP.NET Core?

在 ASP.NET Core 中创建自定义授权属性

在早期版本的 ASP.NET Core 中,创建自定义授权属性需要重写 AuthorizeAttribute 中的 bool AuthorizeCore(HttpContextBase httpContext) 方法。然而,这种方法在当前框架版本中已不再适用。

创建自定义 AuthorizeAttribute 的新方法

现在,创建自定义授权属性的推荐方法是使用新的“策略”设计。这种设计使用 [Authorize] 属性来指定策略,该策略可以在应用程序的 Startup.cs 文件中定义。然后,可以将策略链接到特定的代码块,例如确保用户满足某些声明要求。

虽然策略设计提供了灵活性,但它可能并不适用于所有场景,尤其是在只需要简单声明要求时。对于这种情况,自定义解决方案可能更实用。

实现自定义声明要求属性

一种方法是使用 IAuthorizationFilter 接口,它允许您插入自定义过滤器以强制执行声明要求。以下代码演示了一个示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

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)

    {

        var hasClaim = context.HttpContext.User.Claims.Any(c => c.Type == _claim.Type && c.Value == _claim.Value);

        if (!hasClaim)

        {

            context.Result = new ForbidResult();

        }

    }

}

登录后复制

通过使用此自定义属性,您可以为特定的控制器或操作声明要求,如下例所示:

1

2

3

4

5

6

7

8

9

10

[Route("api/resource")]

public class MyController : Controller

{

    [ClaimRequirement(MyClaimTypes.Permission, "CanReadResource")]

    [HttpGet]

    public IActionResult GetResource()

    {

        return Ok();

    }

}

登录后复制

以上是如何在ASP.NET Core中创建自定义授权属性?的详细内容。更多信息请关注PHP中文网其他相关文章!

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