【问题标题】:Claims for authenticating 3rd party with JWT使用 JWT 对 3rd 方进行身份验证的声明
【发布时间】:2020-05-01 19:35:15
【问题描述】:

我们设计了一个工作流程,使第 3 方系统 (1) 无需额外身份验证即可使用我们 (2) 的系统,如下所示:

这里是描述:

  1. 第 3 方客户端应用程序(Web)想要启动我们的应用程序。它向自己的后端请求令牌。

  2. 第 3 方后端生成一个带有随机令牌值的 JWT,与当前用户关联

  3. 第 3 方后端通过特定 API 将 JWT 发送到我们的系统

  4. 注册后,JWT 被发送回 3rd 方客户端应用程序(web)

  5. 第 3 方应用程序通过 JWT 启动我们的客户端应用程序(Web)

  6. 我们的应用程序使用已注册的 JWT 调用我们的后端 API

问题如下:

  • 如果此工作流程有效/正常
  • 在 JWT 中为 user_email、organization_id、token 使用的正确声明是什么

【问题讨论】:

  • JWT 令牌是带有哈希的普通 json。所以我再次建议user_email 作为 JWT 的一部分,我更喜欢使用代表用户的 UUID。另外,我建议您为每个第 3 方使用不同的密钥。因此,您和第 3 方生成的令牌应该具有不同的哈希值,并且您还需要有一个字段说明哪个客户端生成了 JWT 来区分。休息一下,你的架构看起来不错
  • 我想知道在这种情况下过期时间是如何处理的?

标签: jwt cloud bearer-token jwt-auth


【解决方案1】:

IANA Token Claims registry 应该是标准 JWT 声明的来源。如果您的未列出 - 它可以是任何内容,但您可能希望尽量减少与额外命名空间的潜在冲突。

UPD 看来我误解了这个问题,你宁愿为已获得第 3 方授权的用户提供 API。我删除了现在看起来无关紧要的 oAuth 部分

正如我在 cmets 中所建议的,JWT 带有一个签名,您的后端可以使用第 3 方的公钥对其进行验证。这样一来,您就可以消除几个额外的 API 调用来设置所有内容。

如果您选择这样做,流程可能是这样的:

  1. 第 3 方客户端应用程序 (Web) 想要启动我们的应用程序。它向自己的后端请求令牌。
  2. 第 3 方后端生成具有正确 issueraudience 其他必需声明的 JWT,并使用其私钥对其进行签名
  3. 第 3 方后端将签名的 JWT 返回给客户端
  4. 第 3 方应用程序通过 JWT 启动我们的客户端应用程序(Web)
  5. 我们的应用程序使用已注册的 JWT 调用我们的后端 API(后端将使用令牌颁发者和第 3 方公钥验证令牌签名)。

验证是part of the standard,因此大多数库都会以最少的配置为您处理这个问题。 请注意已知的 JWT/JWT 验证问题并在您身边缓解这些问题。

【讨论】:

  • 嗨@timur,你从一个不正确的前提开始:它不是我们的用户。整个目的是使第 3 方无需登录我们的系统即可为其用户启动我们的应用程序。至少不是通过前端。
  • 对。所以你足够信任第三方来授权他们给你的任何用户?在这种情况下,可能让第 3 方生成带有所需声明的签名 jwt(作为观众)并验证它来自所述第 3 方?一旦我进入合适的计算机,我会更新答案。
  • 是的,它是 B2B 连接(根据协议)。我们可以验证它来自某个特定的安全服务器。谢谢。
猜你喜欢
  • 2016-04-07
  • 2018-08-31
  • 2021-05-17
  • 2018-07-03
  • 1970-01-01
  • 2017-09-09
  • 2023-03-27
  • 2021-05-29
  • 2017-07-30
相关资源
最近更新 更多