通过电子邮件安全地在查询字符串中发送 JWT 吗?

Is sending JWT in a query string via email secure?

我正在实施一个简单的无密码身份验证系统。

Auth Server 将生成一个 JWT(基于用户的电子邮件)并以 http://www.CLIENT-WEBSITE.com/?jwt=aaaa.bbbb.cccc 的格式向用户的电子邮件发送一个 link。

然后,客户端网站将该 JWT 存储在本地存储中,并在所有后续请求中通过 Auth Header(承载方案)将其发送到受保护的 API 服务器以访问它。它还会立即重定向到客户的主页,因此如果用户选择为页面添加书签,他们不会在 URL.

中为 JWT 添加书签

这是安全的实施方式吗?如果不是,那么通过电子邮件将 JWT 从 Auth Server 发送到客户端的更好方法是什么?

由于电子邮件是使用您可能不拥有的 SMTP 服务器发送的,并且通信通道无法加密,一般答案是 ,因为邮件可以拦截。

如果您需要通向 SMTP 和邮件的 TLS 通道,并且您相信邮件服务器只接受 TLS 来下载邮件,那么答案可能是可能 ,取决于承载服务器的 IT 基础设施。

如果邮件是使用用户的 public 密钥加密的,YES 邮件是安全的,但您可能没有那个 public 密钥

通过邮件发送 JWT 有风险,我建议使用 双因素系统 添加到电子邮件 link。例如 用户知道的东西,比如密码或私人数据,o 用户拥有的东西,例如 phone 行号(发送短信)或数字证书(在客户端生成的加密密钥对)。如果双因素验证无误,则发出 JWT

已编辑 - 添加了用例

根据您的评论,您处于可能是的情况。管理 SMTP 和电子邮件服务器,您可以确保 TLS 加密保护服务器之间的消息传输,直到消息被传送到客户端。

在此之后你会失去控制。这意味着用户可以下载电子邮件、转发电子邮件或仅将其存储在其机器中。 JWT 是独立的,有效期至到期时间,因此拥有令牌的任何人都拥有家中的钥匙。

link 的格式并不重要,但我会将 http 更改为 https

您必须评估风险级别是否可以接受,或者发布您需要的 JWT 以确保身份添加第二个因素检查,就像我建议的那样。最终我们必须在安全性和可用性之间达成妥协