【问题标题】:Is sending JWT in a query string via email secure?通过电子邮件在查询字符串中发送 JWT 是否安全?
【发布时间】:2016-12-29 22:06:37
【问题描述】:

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

身份验证服务器将生成一个 JWT(基于用户的电子邮件)并以http://www.CLIENT-WEBSITE.com/?jwt=aaaa.bbbb.cccc 格式发送指向用户电子邮件的链接。

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

这是一个安全的实现吗?如果不是,那么通过电子邮件将 JWT 从 Auth 服务器发送到客户端的更好方法是什么?

【问题讨论】:

    标签: security authentication oauth-2.0 jwt bearer-token


    【解决方案1】:

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

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

    如果消息是使用用户的公钥加密的,YES消息是安全的,但您可能没有该公钥

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

    已编辑 - 添加用例

    从您的 cmets 来看,您处于 MAY BE 情景。管理 SMTP 和电子邮件服务器,您可以确保 TLS 加密保护服务器之间的消息传输,直到消息传递到客户端。

    在此之后,您将失去控制。这意味着用户可以下载电子邮件、转发它,或者只是存储在其机器中。 JWT 是自包含的,并且在到期之前一直有效,因此任何拥有令牌的人都拥有家庭的钥匙。

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

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

    【讨论】:

    • 我正在使用 SSL 和我自己的电子邮件服务器。您能否详细说明链接的外观?如果我在查询字符串中向用户发送包含其电子邮件的链接并返回 JWT,那么任何人都无法与任何其他用户的电子邮件建立链接,从而窃取他们的 JWT?
    猜你喜欢
    • 1970-01-01
    • 2014-01-29
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 2017-08-30
    • 1970-01-01
    相关资源
    最近更新 更多