将后端身份验证令牌附加到响应 URL 时是不是存在安全问题?

Posted

技术标签:

【中文标题】将后端身份验证令牌附加到响应 URL 时是不是存在安全问题?【英文标题】:Is it a security issue when you append a backend authentication token to a response URL?将后端身份验证令牌附加到响应 URL 时是否存在安全问题? 【发布时间】:2021-12-26 10:05:32 【问题描述】:

我已经实现了一个 OAuth 流程,一旦用户使用 google 进行身份验证,我的 Django 后端就会为他们创建一个配置文件,并为他们创建一个 JWT 令牌以用于访问一些受限的 API 端点。我目前遇到的问题是我应该如何将令牌发送到前端。现在,我将令牌附加到前端 URL 并将用户重定向到从 URL 中提取令牌并保存在本地存储中的前端。 这是一个安全问题吗?如果是,我应该如何克服它?

【问题讨论】:

【参考方案1】:

如果您有一个与您自己的后端通信的前端,那么我会考虑使用带有 cookie 的普通会话而不是 JWT。不幸的是,令牌在浏览器中永远不安全。您不应该将它们保存在本地存储中,因为它们很容易被任何恶意代码从那里提取出来。将令牌保存在内存中更安全,但更复杂的 XSS 仍然能够窃取该令牌。

我最近主持了一个网络研讨会,我们讨论了在浏览器中处理令牌的安全性以及我们认为您应该坚持会话的原因:https://curity.io/resources/webinars/hardening-single-page-app-security。您还可以观看这段精彩的视频,该视频深入探讨了浏览器中令牌攻击的更多技术细节:https://pragmaticwebsecurity.com/talks/xssoauth.html

不过,如果您想坚持自己的解决方案,我会考虑以下几点:

在 URL 的片段部分发送令牌。多亏了这个令牌会更安全一些(例如不会被保存在历史中,等等) 尽量将令牌仅保存在内存中,并避免将其保存在本地存储中,除非丢失令牌对您的应用来说不是一个真正的问题(例如,您没有任何由令牌保护的个人信息等) .我知道在考虑 UX 时,这个要求可能有点棘手,因为令牌会在页面刷新期间丢失。

【讨论】:

以上是关于将后端身份验证令牌附加到响应 URL 时是不是存在安全问题?的主要内容,如果未能解决你的问题,请参考以下文章

当用户单击链接时,如何通过请求将身份验证令牌从本地存储发送到后端

无法将令牌附加到 API 调用(基本身份验证、AFNetworking)

SPA 的 Cookie 与基于令牌的身份验证?

如何正确地将身份验证令牌放在 GET 请求的标头中

移动应用的身份验证令牌,是不是存在离线暴力破解漏洞?

next() 中间件不适用于令牌身份验证