使用 JWT 验证第三方的声明

Claims for authenticating 3rd party with JWT

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

描述如下:

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

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

  3. 第三方后端通过特定的API

  4. 将JWT发送到我们的系统
  5. 注册后,将JWT发回给第三方客户端应用(web)

  6. 第 3 方应用程序通过 JWT

  7. 启动我们的客户端应用程序(网络)
  8. 我们的应用程序通过使用已注册的 JWT

  9. 调用我们的后端 API

问题如下:

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

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

正如我在评论中所建议的那样,JWT 带有一个签名,您的后端可以使用第 3 方的 public 密钥验证该签名。这样您就可以消除一些额外的 API 调用来设置所有内容。

鉴于您选择了它,流程可能是这样的:

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

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