Tinywan / webman-jwt

🔑 An authentication(认证) library that supports JSON Web Token (JWT) for webman plugin
https://www.workerman.net/plugin/10
Apache License 2.0
50 stars 22 forks source link

你好,为什么refreshtoken获取新token的代码中,新accesstoken的有效期加上了refresh_token的有效期? #4

Closed woann closed 2 years ago

woann commented 2 years ago

image

woann commented 2 years ago

新access_token不应该也按照配置文件的有效期生成吗?为什么这里要加上$tokenPayload['exp']

Tinywan commented 2 years ago

没过期也可以刷新的,例如:学员需要考试,在考试之前需要强制刷新(访问令牌并没有过期)获取访问令牌,避免在考试过程中令牌失效

woann commented 2 years ago

我测试的结果是,假如access_token有效期是20秒,过期后,我通过refreshtoken刷新得到的新access_token有效期不是20秒,你可以测试下看看

woann commented 2 years ago

image 这样改了才正常

Tinywan commented 2 years ago

不是20秒,而是 20 + 60 秒是吗?

woann commented 2 years ago

Tinywan commented 2 years ago

那是因为配置项有

// 时钟偏差冗余时间,单位秒。建议这个余地应该不大于几分钟。
'leeway' => 60,

你把这个设置成 0,就可以了

woann commented 2 years ago

不是的,这个参数我测试的时候已经改为0了。

Tinywan commented 2 years ago

https://github.com/Tinywan/webman-jwt/issues/4#issuecomment-1118313570 你反馈的这个问题确实是存在的,在常驻内存框架下,令牌签发时间iat 并不是当前的时间戳,而是初始化的时间戳。之前一直是在fpm下使用,没有这个问题

woann commented 2 years ago

通过refresh_token刷新获得的新access_token,有效期貌似是access_exp + refresh_exp的总和,刚刚试了下access_token有效期设置为20秒,refresh_exp有效期为1小时,现在已经过去了接近十分钟,新的access_token一直有效

Tinywan commented 2 years ago

嗯!就是令牌签发时间iat 这个问题

woann commented 2 years ago

等你搞好我再update😋

Tinywan commented 2 years ago

v1.2.5 已经按照你的修复,感谢反馈

woann commented 2 years ago

ok,已更新