为啥建议为魔术链接 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) 实例快得多?