繁体   English   中英

JWT 授权和令牌泄漏

[英]JWT authorization and token leaks

我需要帮助了解用于登录功能的 JWT 令牌的安全性。 具体来说,它如何防止可以看到用户数据包的攻击者的攻击? 我的理解是,无论是否加密,如果攻击者获得对令牌的访问权限,他们将能够复制令牌并使用它来登录自己并访问受保护的资源。 我读过这就是为什么令牌的生存时间应该很短的原因。 但这实际上有多大帮助? 获取资源并不需要很长时间。 如果攻击者可以窃取一次令牌,他们不能在刷新后再次这样做吗?

有没有办法验证客户端发送的令牌是从您发送它的同一个客户端发送的? 还是我错过了重点?

它如何防止可以看到用户数据包的攻击者的攻击?

仅仅因为您可以看到某人的数据包并不意味着您可以看到内容。 HTTPS 对流量进行加密,因此即使有人设法捕获您的流量,他们也无法从中提取 JWT。 每个使用身份验证的网站都只能通过 HTTPS 运行。 如果有人能够进行中间人攻击,那就另当别论了。

他们将能够复制令牌并使用它来登录自己并访问受保护的资源

是的,但仅作为他们窃取令牌的用户。 JWT 已签名,这意味着您无法在不破坏服务器检测到的签名的情况下修改其内容(至少在计算上不可能找到 hash 冲突,以便您可以修改 JWT 的内容)。 对于高度敏感的访问(银行账户、医疗数据、企业云管理员账户......),您将需要至少 2 因素身份验证。

如果攻击者可以窃取一次令牌,他们不能在刷新后再次这样做吗?

可能,但这取决于令牌的暴露方式。 如果被攻击者位于您和服务器之间的未加密通道上,那么确保他们可以重复相同的过程,但这种暴露可能是临时故障/人为错误的结果,可能很快就会得到修复,这将阻止攻击使用令牌一旦它过期。

有没有办法验证客户端发送的令牌是从您发送它的同一个客户端发送的?

如果攻击者成功执行了中间人攻击,他们可以伪造您可能用来验证客户端的任何信息,因此答案是否定的,没有 100% 可靠的方法来验证客户端。


我在 JWT 中看到的最大问题不是 JWT 本身,而是某些人处理它们的方式(存储在未加密的浏览器本地存储中,包含 PII,没有 HTTPS,必要时没有 2 因素身份验证等...)

添加到 Matus 的出色答案:

大多数现实世界的客户端往往是浏览器和移动 UI,它们无法保密并自己进行安全加密。 您描述的风险与其他类型的消息凭证同样发生,例如 cookies。

我的博客文章详细探讨了浏览器案例,以帮助您思考。

对于您的情况,我可能会按照类似的方式进行:

  • 有哪些选择?
  • 不记名代币在哪些领域存在担忧?
  • 在这些领域有更好的替代方案吗?

对于某些类型的客户端,您可以增强身份验证,例如基于Mutual Trust ,尽管并非所有授权服务器都支持这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM