JWT Middleware疑问

JellyBool

jwt.refresh 可以理解为在你的token过期后自动为你刷新token并返回。就像你可以手动获取新的token一样:

$newToken = JWTAuth::parseToken()->refresh();

下面的写法可以直接自动将刷新的token放在header并返回

Route::group(['middleware' => ['jwt.auth', 'jwt.refresh']], function () {
    // Your routes here that needs to be protected by the token 
});
pengbo37877

@JellyBool 这里有个过期时间和刷新时间的概念,如果用到这两个概念,使用的流程是什么?

JellyBool

个人的理解是这样:
ttl:token生存的时间间隔
refresh_ttl: 刷新token的时间间隔

这样出现以上的原因,主要是由于下面的应用场景:

在JWT中,提倡每次刷新token的时间要短于token的生存时间,也就是在token过期之前去刷新token。

比如,将ttl设置为一周,但是提倡的做法是每次用户请求的时候我们都刷新token或者将token的刷新时间设置为一个小时,这个时候,如果用户距离上一次访问我们的站点的时间超过一个星期,这个时候我们就把token放进了黑名单,而且需要用户再次登录才可以获取新的token。这样就保证了用户的体验 @pengbo37877

pengbo37877

@JellyBool 有没有可能是ttl要小于refresh_ttl呢,用户用token访问api,在ttl时间内正常,超过ttl但是没有超过refresh_ttl的时候jwt自动生成一个新的token返回给用户,老的token放入黑名单,后续用新的token访问api,这样如果用户在refresh_ttl时间内都不需要重新登录

JellyBool

个人的理解是:如果ttl小于refresh_ttl。那refresh_ttl就没什么用了。

超过ttl但是没有超过refresh_ttl的时候jwt自动生成一个新的token返回给用户

没理解错,这个时候,我们已经刷新了一个token @pengbo37877

mingyoung

@JellyBool 使用了jwt.refresh Middleware后,貌似token只可以用一次?

pengbo37877

@mingyoung 用jwt.refresh middleware的路由每次请求都会刷新token,新的token会在返回的header里面带回来,如果客户端的请求没有并发的话应该没有问题,如果有并发的话就会出问题,这个时候启用下blacklist_enabled,并设置blacklist_grace_period的值大于0就可以满足并发的需求。

qiudaoyu

@JellyBool token放进了黑名单 这个怎么做?