是否有必要每次请求刷新令牌?

时间:2017-05-09 18:37:06

标签: api token jwt single-page-application

我在这里是因为我对谷歌上发现的内容并不满意。

我一般都在构建SPA,所以对我来说这个过程很简单:成功登录后会生成一个jwt并将其用于我从客户端发出的每个请求。

有人告诉我,我应该刷新该令牌并为我提出的每个请求发回一个新令牌。这对我来说有意义吗?我的意思是,如果有人试图破解我,嗅探请求会给黑客提供我收到的相同令牌,那么捕获的是什么?

我的意思是,如果我在另一个请求完成之前启动请求怎么办?从理论上讲,我会发送两次相同的令牌,其中一个请求将被拒绝。

这是如何正确处理的?我确信这比我自己想象的更多。

1 个答案:

答案 0 :(得分:12)

这是安全性和便利性之间的妥协。

不,您不需要在每个请求上刷新令牌。但是你肯定希望你的JWT在某个时候到期。这是为了保护您免受JWT盗窃,恶意用户可以使用被盗访问令牌无限期地访问目标资源。

以下是处理令牌过期的方法:

  1. 实施refresh token flow。您将在进行身份验证时发出访问JWT和刷新JWT的权限。一旦访问JWT已过期,您将使用刷新JWT获取新访问JWT。
  2. 实施滑动过期。在JWT有效期的half到期后,您将发布新的JWT。可以找到它的一个例子here。我建议在令牌过期时加入截止日期。例如,初始令牌有效期为20分钟,截止日期为8小时。滑动过期8小时后,您将停止发放新令牌。