jwt - 使用 JWT 对 3rd 方进行身份验证的声明
问题描述
我们设计了一个工作流程,使第 3 方系统 (1) 无需额外身份验证即可使用我们的 (2),如下所示:
这是描述:
第 3 方客户端应用程序 (web) 想要启动我们的应用程序。它向自己的后端请求令牌。
第 3 方后端生成一个带有随机令牌值的 JWT,与当前用户相关联
第 3 方后端通过特定 API 将 JWT 发送到我们的系统
注册后,JWT 被发送回第 3 方客户端应用程序(Web)
第 3 方应用程序通过 JWT 启动我们的客户端应用程序(Web)
我们的应用程序使用注册的 JWT 调用我们的后端 API
问题如下:
- 如果此工作流程有效/正常
- 在 JWT 中用于 user_email、organization_id、token 的正确声明是什么
解决方案
IANA 令牌声明注册表应该是标准 JWT 声明的来源。如果您的未列出 - 它可以是任何东西,但您可能希望尽量减少与额外命名空间的潜在冲突。
UPD 看来我误解了这个问题,您宁愿为已获得第 3 方授权的用户提供 API。我删除了现在似乎无关紧要的 oAuth 部分
正如我在评论中建议的那样,JWT 带有一个签名,您的后端可以使用第 3 方的公钥对其进行验证。通过这种方式,您可以消除几个额外的 API 调用来设置所有内容。
如果你选择了,流程可以是这样的:
- 第 3 方客户端应用程序 (web) 想要启动我们的应用程序。它向自己的后端请求令牌。
- 第 3 方后端生成具有正确
issuer
的audience
其他必需声明的 JWT,并使用其私钥对其进行签名 - 第 3 方后端将签名的 JWT 返回给客户端
- 第 3 方应用程序通过 JWT 启动我们的客户端应用程序(Web)
- 我们的应用程序使用注册的 JWT 调用我们的后端 API(后端将使用令牌颁发者和第 3 方公钥验证令牌签名)。
验证是标准的一部分,因此大多数库将以最少的配置为您处理此问题。请注意已知的 JWT/JWT 验证问题并在您身边缓解它们。
推荐阅读
- python - “一个系列的真值是模棱两可的。” 基于列表比较的DataFrame中的新列
- vlc - 当我在网络上应用 vlc 时,我的计算机的 CPU 变为 100%。我应该怎么办?
- php - 未定义的变量 $user->username (Laravel 5.7)
- r - 是否可以删除 purrr:::iwalk 的 .x 中的某些行?
- python - 在蛇游戏中增加蛇的长度
- python-3.x - 获取 Pandas 字符串中第一次出现整数的索引
- docker - 从容器外部或内部性能方面进行负载转储
- c# - 在实体框架中选择作为子查询接收的列的不同计数和总和
- rust - 夜间生锈中的错误或非功能?(特质专精)
- winapi - 以编程方式获取 C++ 中 msi 文件的数字签名摘要算法