我正在使用JWT来验证我的API服务器。JWT是由外部验证服务器(在本例中是keycloak)发布的,典型的过期时间约为5分钟(IIRC),然后前端应该使用这些令牌向API发出请求。
我一直在尝试检查前端令牌的到期日期,然后再发出请求。如果令牌过期,我会使用刷新令牌先获得新的auth令牌,然后再发出请求。
基本工作流程为:
== Login == 1.获取身份验证令牌2.存储过期(exp)日期(以UTC秒为单位)
== API请求== 1.检查到期日期(isExpired = expiryDate <= Math.floor(Date.now() / 1000)
)2.如果确定=〉,则发出请求3.否则,刷新身份验证令牌并重做请求。
像这样检查日期是不是不好的做法?确保请求成功的替代方法是什么?
我问是因为我在一些机器上看到过过期检查总是返回false
(它没有过期)的问题...
3条答案
按热度按时间cqoc49vn1#
依赖于前端检查的问题是您无法控制用户计算机上的本地时间,这可能是错误的。
一个更健壮的方法是照常发出请求,如果令牌过期,则从服务器返回一个错误消息。在每次请求时,如果从服务器收到错误消息,则客户端可以触发刷新过程,然后使用新令牌重新提交原始请求。
j8yoct9x2#
处理这种情况的最佳方法是前端只检查后端设置的到期日期是否过期。通常,错误返回如下{name:“令牌过期错误”,消息:'jwt expired'}。如果是这种情况,那么这就是您将发出另一个登录请求的时间。
qncylg1j3#
我觉得,前端检查将是一个很好的,而不是提出一个请求与过期的令牌,并做刷新机制后,我同意,当地时间可能会有所不同。为了确保它确实工作,如果我们使用UTC的令牌,我们可以很容易地验证在任何时区。