gpt4 book ai didi

javascript - 在 JS Web 应用程序中,如何确保拥有访问 token 的恶意用户无法刷新它?

转载 作者:行者123 更新时间:2023-11-29 19:30:04 25 4
gpt4 key购买 nike

我发现使用 JS 应用程序确保 OAuth 的安全 a̶̶p̶a̶i̶n̶̶i̶n̶̶t̶h̶e̶̶a̶.̶.̶.̶非常烦人:(


假设我是合法用户 Alice,使用 OAuth 服务器的 JS 单页应用程序客户端。我已登录并收到我的 token (访问和刷新)。

不幸的是,在某些时候,我仍然有效的访问 token 和刷新 token 被恶意用户 Bob 检索(请注意,没有理由只能检索刷新 token ,因为两者都是由 OAuth 服务器以相同方式发回)。

好的,所以我从这个 question 中了解到好吧,这并不重要,因为邪恶的 Bob 做坏事的时间有限,因为 token 的生命周期很短。

现在假设 token 已过期。理论上,Bob 应该一切都结束了。

但我不明白现在是什么阻止了 Bob 请求新 token 。 Alice 有什么是 Bob 没有的,以便只有 Alice 可以获得新的访问 token ?


现在让我们考虑稍微不同的客户端配置:仍然是一个 JS 网络应用程序,但是这次实际的 OAuth 客户端是一个 PHP 后端,JS 客户端发出请求到。此 PHP 后端充当一种代理,并且与任何 OAuth 客户端一样,向 OAuth 服务器发出/转发请求。

在这种情况下,刷新 token 可以由后端保密,Bob 只会检索访问 token 。但是在这种情况下,除了这个现在过期的访问 token 之外,Bob 确实知道,Alice 可以向后端提供哪些数据,以便区分她和 Bob 这样刷新过程只为 Alice 完成?

最佳答案

对于 JavaScript 应用程序 (SPA),您应该使用 implicit grant ,它不支持刷新 token 。基本上,您的用户被重定向到 auth 服务器,登录并获取访问 token 。当访问 token 过期时,他们需要通过身份验证服务器重新进行身份验证。

由于您无法在 JavaScript 应用程序中保守 secret ,因此没有客户端 ID 或 secret :

The implicit grant type does not include client authentication, and
relies on the presence of the resource owner and the registration of
the redirection URI.

关于javascript - 在 JS Web 应用程序中,如何确保拥有访问 token 的恶意用户无法刷新它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28417831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com