如何保护刷新令牌免受黑客攻击

4
我在谷歌上搜索了很多关于如何保护refresh_token不被黑客攻击的信息,因为它将存储在浏览器的local-storage/cookie中,所以黑客可以轻松窃取这些令牌,但我找不到一个合适的答案,所以我来到这里。
我知道access_token会在短时间内过期,我们应该使用refresh_token来获取新的access_token。但是如果黑客窃取了refresh_token,他可以作为登录用户长时间停留在系统中,对吗?
有些人说,你可以使用client_id和client_secret来保护它,但黑客将访问API的端点,其中包含client_id和client_secret。因此,黑客可以轻松获得新的access_token。
因此,我找不到保护黑客免于获取浏览器的local-storage/cookie中的refresh_token的方法。
请问有人能够指导我如何保护refresh_token不被黑客从浏览器的local-storage/cookie中获取吗?

@dur 我必须要有 refresh_token,否则用户会经常被登出。 授权授予类型与非密码授予类型有何不同。 - Suganthan Madhavan Pillai
密码授权类型不建议使用。存在太多安全问题。 - dur
2个回答

1
根据您的解释,您谈论的是基于浏览器的应用程序。如果此应用程序没有后端,则没有安全的地方存储您的长寿令牌或客户端密码。

从OAuth 2.0的角度来看,这些被称为公共客户端。因此协议不允许它们拥有客户端密码。因此,它们具有客户端ID和重定向URL以进行客户端验证(客户端识别)。Implicit flow是适用于在浏览器上运行的SPA的一个关键流程。根据规范,它们将不会获得刷新令牌。原因是它们无法保护此类机密信息。

但是,如果您拥有后端并且能够关联浏览器会话和后端存储,则可以使用提供刷新令牌并安全存储它的流程。但是,这需要您的应用程序架构支持此类操作(例如:浏览器会话和后端存储)。

另外,与其让最终用户每次都要登录,不如利用身份服务器的已登录状态来跳过登录。这也将依赖于身份服务器的浏览器cookie和其生命周期。例如,身份服务器可能具有有效期为24小时的浏览器会话。因此,在此期间访问应用程序时,您的客户端将不会看到登录页面。


1
我的应用程序有后端。成功登录后,我也在响应中发送了refresh_token,这对于任何人来说都很容易被攻击。那么如何从后端安全地发送refresh_token,以及前端如何安全地存储该refresh_token。 - Suganthan Madhavan Pillai
1
@SuganthanMadhavanPillai,拥有后端是很棒的。这意味着您可以使用授权码流程。您不能从后端获取令牌响应吗?例如,通过接收授权码响应的servlet?如果可能的话,您将不必重新发送刷新令牌到后端。如果前端直接联系API,则只需获取访问令牌即可。 - Kavindu Dodanduwa

0

您可以尝试使用这个库Secure-ls来保护本地存储。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接