繁体   English   中英

如何处理/管理访问令牌中的大量权限? 什么是最好的方法?

[英]how to handle/manage a lot of permissions in access-token? what's the best approach?

当我尝试访问我的 API 并在 header 中发送令牌时,出现“请求 header 太长”错误。我们如何管理访问令牌中的权限,因为我在访问令牌中有很多权限,大约是大小为 15kb。 我知道不建议将权限存储在访问令牌中,那么在 API 端对用户进行身份验证和授权的最佳方法是什么?

我们正在获取访问令牌中的所有权限,但现在权限越来越大,因为我们有很多模块。 在 asp.net 核心 API 中访问用户权限而不是将其保留在访问令牌中的另一种方法是什么?

    {
  "roles": [
    "Admin"
  ],
  "iss": "Issuer",
  "sub": "sub",
  "aud": [
    "https://example.com/api",
    "https://example.com/userinfo"
  ],
  "iat": 1666198659,
  "exp": 1666205859,
  "azp": "azp",
  "scope": "openid profile email offline_access",
  "org_id": "company1",
  "permissions": [
    "permission.1",
    "permission.2",
    ........
    "permission.150",
]
}

这可能是一个解决方案: https://auth0.com/developers/lab/fine-grained-authorization

基本上,由于每个用户都有很多权限,所以您不再将它们存储在令牌中; 你可以调用这个为你存储它们的服务。

免责声明:我是构建此解决方案的团队的一员:)

你有两个选择。

  1. 您可以尝试使用类似于此处的方法来缩短权限。 还有很多其他类似的问题也有类似的方法。 但是,请注意,您根据继承自的内容限制了权限数量,因此这可能有效也可能无效。 您可以将一个字符串粘贴到 JWT 中,每个字符都用作权限标志。 这带来了更多的缺点,即保持数据是最新的。

  2. 您设置远程系统进行授权。 类似于Duende 的 Policy Server 这意味着 JWT 中没有授权数据。例如,您可以从您的 api/客户端对您的身份服务器进行简单的 http 调用,并让身份服务器评估用户是否可以做他们想做的事。

由于您拥有大量权限,后者似乎适合您的场景。 它带有开销,但实际上没有其他选择。 https://github.com/Perustaja/PermissionServerDemo是一个示例,它使用内置的 ASP.NET 核心授权评估以及用于 .network 调用的 gRPC。 如果您不需要太多的基础设施,您可以做一些更精简和更简单的事情,基本上做同样的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM