如何在前端和后端存储 JWT 刷新令牌?
Posted
技术标签:
【中文标题】如何在前端和后端存储 JWT 刷新令牌?【英文标题】:How to store JWT refresh token on front-end and back-end sides? 【发布时间】:2019-01-29 23:40:33 【问题描述】:客户端 - 如果我们将刷新令牌保存在“本地存储”中并且黑客获取了此令牌,他/她将永远可以访问用户帐户(即使刷新令牌已过期,黑客也可以刷新访问权限并刷新令牌)。
服务器端——如果我们在数据库中保存刷新令牌,如何实现多重身份验证。如果我们创建带有字段的表,例如“UserId”、“RefreshToken”、“ExpireDate” 并为单个用户保存多个刷新令牌,是否正确?
您建议将刷新令牌保存在哪里以及为什么? 你的方法是什么?
谢谢
【问题讨论】:
【参考方案1】:不完全了解您的问题,但您可以尝试查看服务器“Set-Cookie”响应标头。
这基本上是来自服务器的“请求”,用于在客户端上设置 cookie。 cookie 只能是 HTTP,这意味着 javascript 无法访问它。它只是在所有后续请求中自动发送到服务器。以这种方式设置您的 JWT cookie。
如果您将刷新令牌包装在您的 JWT 中,它将是完全安全的。然后,服务器可以通过解码 JWT 并访问其数据对象来访问相关客户端的刷新令牌。
不确定这是否能回答您的问题,但可能会让您思考正确的路线。
【讨论】:
但是有一个问题,正如你所说,我们可以将刷新令牌放在JWT里面,但是如果攻击者访问了访问令牌,我们的服务器会自动刷新它,因为刷新令牌总是可用的甚至来自过期的访问令牌的服务器。对吗?以上是关于如何在前端和后端存储 JWT 刷新令牌?的主要内容,如果未能解决你的问题,请参考以下文章
如何在解耦的前端和后端中的每个请求中仅发送 http cookie(包含 jwt)?
过期后如何刷新 JWT 令牌(Angular 1.5 + Laravel 5.2)