【发布时间】:2026-01-10 11:20:06
【问题描述】:
用户身份验证的常见场景如下:
- 用户使用其凭据(用户名/密码)注册和登录
- 服务器验证用户的凭据,如果有效,返回
access token和refresh token -
access token会在进一步的请求中发送,如果它有效,服务器会使用请求的资源进行响应 - 当
access token不再有效时,服务器请求客户端提供一个refresh token以便发出一个新的access token - 服务器收到
refresh token,可能会发生两件事:- 如果
refresh token有效,则向客户端发出一个新的access token - 如果不是,服务器请求用户进行身份验证
- 如果
为了让客户端能够在每个请求中发送access token,令牌应该存储在浏览器存储(本地/会话存储)或cookies ,这使得它容易受到 XSS(跨站点脚本)攻击。如果我们为access token 设置较短的生命周期,这个问题可能会得到缓解。
然而,我的问题是关于refresh token。这个令牌应该有很长的生命周期,因为我们用它来获取新的access tokens,如果攻击者拦截它就会有问题。所以在客户端存储这个令牌可能不是一个好主意,对吧?
但是,有什么选择呢?
我们可以将它存储在带有“httpOnly”标志的 cookie 集中吗?但这不会使其容易受到 CSRF(跨站点请求伪造)攻击吗?
加密令牌并仍将其保存在浏览器存储中是否安全?
提前谢谢你。最好的问候!
【问题讨论】:
标签: security cookies token xss csrf