在我的应用程序中,当用户成功登录时,我使用 JWT 生成访问令牌和刷新令牌并将其存储在 cookie 中。这对我来说似乎是正确的,因为 cookie 比本地存储(仅使用 HTTP)增加了更多的安全性。
问题是两个令牌都会随每个请求一起发送。理论上,我应该只在访问令牌过期时发送刷新令牌。我是否错误地处理了这个问题?
我能想到的唯一解决方案是将访问令牌存储在本地存储中,将刷新令牌存储在cookie中(因为它需要更高的安全性),但我并不完全相信这一点。我正在使用 Express 和 React。有什么我没听懂的吗?
提前谢谢您。
为了避免刷新令牌被发送到每个请求,您可以做的是确保它仅发送到特定路径,例如:
res.cookie('refreshToken', refreshToken, {
httpOnly: true,
secure: true,
sameSite: 'Strict',
path: '/refresh-token' // this cookie will only be sent with requests /refresh-token
});
res.cookie('accessToken', accessToken, {
httpOnly: true,
secure: true,
sameSite: 'Strict'
});