为啥建议为魔术链接 JWT 令牌提供比通过 HTTP 传递的令牌更短的 TTL,为啥是一次性的?

Posted

技术标签:

【中文标题】为啥建议为魔术链接 JWT 令牌提供比通过 HTTP 传递的令牌更短的 TTL,为啥是一次性的?【英文标题】:Why is it recommended to give magic link JWT tokens a shorter TTL than those delivered through HTTP and why one-time?为什么建议为魔术链接 JWT 令牌提供比通过 HTTP 传递的令牌更短的 TTL,为什么是一次性的? 【发布时间】:2020-09-10 22:15:37 【问题描述】:

我希望创建一个从不使用密码的应用程序,并希望了解其中的风险。

Magic Link 指南通常建议给 JWT 令牌一个较短的 TTL 并实现一次性使用。

被入侵的电子邮件帐户似乎是一个静音点,因为可以使用密码提醒来检索密码。我们已经依赖电子邮件帐户。此外,与大多数自建应用程序相比,电子邮件的安全性(例如设备识别)要好得多。

如果您使用 HTTPS,将 JWT 令牌作为查询字符串参数传递是没有风险的,我会这样做。

强制一次性使用意味着维护服务器端令牌数据库 - 使用 JWT 的原因之一是不必这样做。

采用无密码意味着人们每次想要登录时都必须通过电子邮件往返,这不是很好的用户体验,但可以接受吗?

一旦他们获得访问权限,所有未来的身份验证都会像往常一样通过 JWT 进行管理。

我错过了什么吗?

【问题讨论】:

即使使用 HTTPS,在查询字符串中传递机密也是有风险的。除此之外,我同意如果您还需要存储令牌,JWT 毫无意义。 JWT 通常是一个糟糕的选择,不应成为您的默认选项。 存储一个秘密字符串是迄今为止最简单的解决方案。甚至像 auth0 这样的公司也无法避免 JWT 搞砸,那你为什么要这么做? insomniasec.com/blog/auth0-jwt-validation-bypass 【参考方案1】:

您可以实现一个持续时间较长的刷新令牌和一个短期访问令牌,以便用户必须登录几次

【讨论】:

以上是关于为啥建议为魔术链接 JWT 令牌提供比通过 HTTP 传递的令牌更短的 TTL,为啥是一次性的?的主要内容,如果未能解决你的问题,请参考以下文章

为啥即使我没有在 Jwt.io 中提供秘密(签名),jwt 令牌也会显示有效负载?

为啥通过共享内存的通信比通过队列慢得多?

为啥直接搜索 MongoDB 分片的全文搜索比通过集群管理器 (mongos) 实例快得多?

为啥 JWT 需要作为 Bearer Token 标头发送?

为啥我的 jwt 令牌在背面而不是正面返回 null

如何在spring security oauth2授权服务器中通过jwt令牌获取用户信息?