如何使用 ASP.NET Core 中的声明检查 JWT 中的权限?

莫拉修

我有一个关于 Claims、JWT 和 ASP.Net Core 的问题。再次......(问候克里斯)。所以...

我有我的 JWT 和Claim

"Authorization": "CanEditUnit,CanBrowseUnit,CanCreateUnit,CanDeleteUnit,CanSeeUnitDetails,CanBrowseRole,CanEditRole,CanCreateRole,CanDeleteRole,CanSeeRoleDetails,CanBrowseUser,CanSeeUserDetails,CanDeleteUser,CanEditUser,CanRegisterNewUser"

等等。

声明拥有该用户包含的所有权限(例如:如果用户将数据库中的 CanEditUnit 设置为 True,则 CanEditUnit 将保存在授权声明中,但如果某些内容设置为 False,则它根本不会出现在该声明中。

然后我想检查用户是否在这样的策略中拥有该权限:

options.AddPolicy("CanEditUnit", policy => policy.RequireClaim("Authorization", "CanEditUnit"));

但它可能会检查Authorization Claim 是否等于CanEditUnit

有没有办法用contains而不是Equal来检查策略如果没有,我该怎么办?

在文档中找到了这个,但我不知道如何使用它。

柯克·拉金

正如您在问题中所建议的那样,它看起来RequireAssertion有能力为您处理这个问题。下面是一个例子:

policy.RequireAssertion(ctx =>
{
    var authorizationClaim = ctx.User.FindFirstValue("Authorization");

    if (authorizationClaim == null)
        return false;

    return authorizationClaim.Split(",").Contains("CanEditUnit");
});

这只是查找Authorization声明,如果存在,则将其拆分,并检查CanEditUnit是否存在

如果你想要一些更可重用的东西,你可以创建一个AssertionRequirement你自己的自定义类。下面是一个示例:

public class CustomAssertionRequirement : AssertionRequirement
{
    public CustomAssertionRequirement(string requiredValue)
        : base(ctx => HandleRequirement(ctx, requiredValue)) { }

    private static bool HandleRequirement(AuthorizationHandlerContext ctx, string requiredValue)
    {
        var authorizationClaim = ctx.User.FindFirstValue("Authorization");

        if (authorizationClaim == null)
            return false;

        return authorizationClaim.Split(",").Contains(requiredValue);
    }
}

为了使用这个新类,您可以将其作为要求添加到AuthorizationPolicyBuilder(而不是使用RequireAssertion),如下所示:

policy.AddRequirements(new CustomAssertionRequirement("CanEditUnit"));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 jwt 授权在 Asp.net core 中检查用户验证

来自分类Dev

JWT:如何从声明中的特定键获取值列表。C#Asp.Net核心

来自分类Dev

使用授权过滤器在asp.net core中实现基于权限的授权

来自分类Dev

如何在asp.net core 2.2中制作一个可以调用数据库检查用户声明授权用户的中间件

来自分类Dev

在 ASP.NET Core 中,如何使用 sqlite

来自分类Dev

如何将 JWT 用于 asp.net Core

来自分类Dev

在ASP.NET Core的Swagger中使用JWT(授权:承载)

来自分类Dev

如何在ASP.NET Core MVC中基于用户表中的字段添加声明?

来自分类Dev

将自定义验证添加到ASP.NET Core的JWT令牌中?

来自分类Dev

在ASP .Net Core 2.2中添加JWT令牌后,授权不起作用

来自分类Dev

通过在配置中实现JWT的ASP.net Core API错误

来自分类Dev

在 c# asp.net core web api 中创建 jwt 令牌

来自分类Dev

在ASP.NET 5中使用System.IdentityModel.Tokens.Jwt编码JWT令牌

来自分类Dev

NET Core中如何从HttpContext访问声明?

来自分类Dev

使用内置身份服务器在ASP Net Core 3.0中添加和访问声明

来自分类Dev

转换ASP.Net Core中的Open Id Connect声明

来自分类Dev

ASP.Net Core JWT令牌验证

来自分类Dev

如何在Asp.net Core MVC(又名Asp.Net 5 RC1)中检查响应cookie?

来自分类Dev

在ASP.NET Core中,如何检查请求是否为本地?

来自分类Dev

如何检查ASP.NET Core 3.0的单元测试中是否记录了错误?

来自分类Dev

如何检查用户是否在ASP.NET Core中已通过身份验证

来自分类Dev

在.NET Core 3.1中设置具有声明的JWT策略?

来自分类Dev

检查用户是否在ASP.NET Core中登录

来自分类Dev

在ASP.Net Core中检查令牌过期的性能方法

来自分类Dev

ASP .NET CORE 2.2 JWT 和声明网站身份验证

来自分类Dev

如何在Asp.net Core中缓存资源?

来自分类Dev

如何在ASP.NET Core中设置cookie validateInterval?

来自分类Dev

如何从ASP .NET Core MVC 1.0中的视图访问会话

来自分类Dev

如何更改asp.net core 1中的令牌响应?

Related 相关文章

  1. 1

    使用 jwt 授权在 Asp.net core 中检查用户验证

  2. 2

    JWT:如何从声明中的特定键获取值列表。C#Asp.Net核心

  3. 3

    使用授权过滤器在asp.net core中实现基于权限的授权

  4. 4

    如何在asp.net core 2.2中制作一个可以调用数据库检查用户声明授权用户的中间件

  5. 5

    在 ASP.NET Core 中,如何使用 sqlite

  6. 6

    如何将 JWT 用于 asp.net Core

  7. 7

    在ASP.NET Core的Swagger中使用JWT(授权:承载)

  8. 8

    如何在ASP.NET Core MVC中基于用户表中的字段添加声明?

  9. 9

    将自定义验证添加到ASP.NET Core的JWT令牌中?

  10. 10

    在ASP .Net Core 2.2中添加JWT令牌后,授权不起作用

  11. 11

    通过在配置中实现JWT的ASP.net Core API错误

  12. 12

    在 c# asp.net core web api 中创建 jwt 令牌

  13. 13

    在ASP.NET 5中使用System.IdentityModel.Tokens.Jwt编码JWT令牌

  14. 14

    NET Core中如何从HttpContext访问声明?

  15. 15

    使用内置身份服务器在ASP Net Core 3.0中添加和访问声明

  16. 16

    转换ASP.Net Core中的Open Id Connect声明

  17. 17

    ASP.Net Core JWT令牌验证

  18. 18

    如何在Asp.net Core MVC(又名Asp.Net 5 RC1)中检查响应cookie?

  19. 19

    在ASP.NET Core中,如何检查请求是否为本地?

  20. 20

    如何检查ASP.NET Core 3.0的单元测试中是否记录了错误?

  21. 21

    如何检查用户是否在ASP.NET Core中已通过身份验证

  22. 22

    在.NET Core 3.1中设置具有声明的JWT策略?

  23. 23

    检查用户是否在ASP.NET Core中登录

  24. 24

    在ASP.Net Core中检查令牌过期的性能方法

  25. 25

    ASP .NET CORE 2.2 JWT 和声明网站身份验证

  26. 26

    如何在Asp.net Core中缓存资源?

  27. 27

    如何在ASP.NET Core中设置cookie validateInterval?

  28. 28

    如何从ASP .NET Core MVC 1.0中的视图访问会话

  29. 29

    如何更改asp.net core 1中的令牌响应?

热门标签

归档