【问题标题】:Boundaries of using Claims in the authorization JWT token OAuth2+OIDC在授权 JWT 令牌 OAuth2+OIDC 中使用 Claims 的边界
【发布时间】:2022-01-24 21:07:26
【问题描述】:

我们的主要产品是公共 API。我们使用 IdentityServer4 对我们的用户进行身份验证和授权。现在,我正在与我的队友讨论可以在令牌中声明的信息的数量和类型。例如,通常我们在声明中添加用户标识符和用户组织的标识符。 另外,我们添加用户的配置,例如

  • 配置用户的服务器 URL
  • 用户的内部标识符
  • 用户的设备标识符 在授权和生成 JWT 令牌期间,从不同的内部服务和数据库请求这些用户的配置属性。

有一个选项 - 在 JWT 令牌中仅保留用户标识符并请求 API 方法中的所有配置属性。 在我看来,在声明中保留配置的主要优点是减少对其他服务和数据库的请求。

也许,关于我的问题的最佳实践来自可靠来源,甚至在 RFC 中,声明中可以包含哪些信息?

【问题讨论】:

    标签: api oauth-2.0 jwt openid-connect claims-based-identity


    【解决方案1】:

    没有 RFC 或标准可以说明哪些信息可以在声明中结束,哪些不可以。我会尽量遵守这些准则:

    1. 尽量使令牌中的信息尽可能少。不要仅仅因为一项服务会不时需要它而将某些东西放在索赔中。仅放置大多数服务一直使用的那些声明,或需要由授权服务器声明的信息。其他数据通常属于微服务本身,也可以通过 API 调用轻松获取。如果您使用 Internet 上公开的 JWT,这一点尤其重要,因为任何人都可以阅读这些信息。

    2. 尽量不要将个人身份信息放入 JWT 中,尤其是在令牌公开可用的情况下。当有人窃取此类令牌时,他们将能够读取您用户的 PII。如果您需要令牌中的此类信息,请考虑使用Phantom Token 模式。这样信息就不会被窃听。

    3. 通过限制令牌中的声明数量,您还可以限制令牌的权限。最好拥有权限较低的令牌,并在需要更多信息或权限时使用token exchange

    4. 请记住,令牌中的声明是授权服务器和消费者(通常是 API)之间的合同。向令牌添加内容后,通常无法将其删除,因为这将构成重大更改。

    查看我们在 Curity 撰写的这些文章,了解有关处理声明和 JWT 的更多知识:

    【讨论】:

      猜你喜欢
      • 2018-06-05
      • 2020-10-20
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 2017-08-22
      • 2022-11-02
      • 2017-07-09
      • 2019-06-04
      相关资源
      最近更新 更多