【问题标题】:how to handle/manage a lot of permissions in access-token? what's the best approach?如何处理/管理访问令牌中的大量权限?什么是最好的方法?
【发布时间】:2022-11-10 01:17:43
【问题描述】:

当我尝试访问我的 API 并在标头中发送令牌时,我收到“请求标头太长”错误。我们如何管理访问令牌中的权限,因为我在访问令牌中有很多权限,它的大小约为 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",
]
}

【问题讨论】:

  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: permissions jwt access-token auth0 claims


【解决方案1】:

你有两个选择。

  1. 您可以尝试使用类似here 的方法来缩短权限。还有很多其他类似的问题采用类似的方法。但是,请知道您根据继承的内容限制您的权限数量,因此这可能会或可能不会起作用。你可以贴一个

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

    由于您拥有大量权限,后者似乎适合您的场景。它带有开销,但没有真正的替代方案。 https://github.com/Perustaja/PermissionServerDemo 是一个使用内置 ASP.NET Core 授权评估和 gRPC 进行网络调用的示例。如果您不想要大量基础架构,您可以制作更精简、更简单的东西,基本上做同样的事情。

【讨论】:

    猜你喜欢
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多