在前端的每个请求上检查令牌到期

时间:2018-09-27 13:17:22

标签: javascript ecmascript-6 jwt

我正在使用JWT对我的API服务器进行身份验证。 JWT由外部身份验证服务器(在本例中为密钥斗篷)发出,通常具有约5分钟(IIRC)的到期时间,然后前端应使用这些令牌向API发出请求。

我一直在尝试在发出每个请求之前在前端检查令牌的到期日期。如果令牌已过期,我将使用刷新令牌来首先获取新的身份验证令牌,然后发出请求。

基本工作流程是:

==登录== 1.获取身份验证令牌 2.存储到期日期(以UTC秒为单位)

== API请求== 1.检查到期日期(isExpired = expiryDate <= Math.floor(Date.now() / 1000)) 2.如果确定=>发出请求 3.否则,刷新身份验证令牌并重做请求。

检查日期是否是错误的做法?确保请求成功的另一种方法是什么?

我问是因为我在某些过期检查总是返回false(未过期)的机器上看到了问题...

2 个答案:

答案 0 :(得分:1)

依靠前端检查的问题是您无法控制用户计算机上的本地时间,这可能是错误的。

一种更可靠的方法是像往常一样发出请求,并且如果令牌已过期,则从服务器返回错误消息。对于每个请求,如果从服务器收到错误消息,则客户端可以触发刷新过程,然后使用新令牌重新提交原始请求。

答案 1 :(得分:0)

处理这种情况的最好方法是前端应该只检查后端设置的过期日期是否过期。通常错误返回就像这样 {name: 'TokenExpiredError', message: 'jwt expired'}。如果是这种情况,那么您将再次提出登录请求。