为什么JWT无法做到自撤销?

生成的JWT是无法撤销的。这个是由什么决定的,是JWT本身的算法决定的吗?

还有一个问题是,JWT是如何来校验一个Token是否有效的?

同样的header.payload.signature,每次生成的token都不一样,它怎么才能知道某个token是有效的?

阅读 4.3k
2 个回答
生成的JWT是无法撤销的,除非是达到了指定的过期时间。这个是由什么决定的?

就是过期时间会写在token里或者与token关联。

是JWT的算法决定的吗?

还有一个问题是,JWT是如何来校验一个Token是否有效的?

一般会定时清理过期的token,并且访问的时候也会先查看token是否过期。

我有注意到同样的数据生成的JWT,在Node进程重启后就会被判定为无效的Token。看起来像是写进了内存一样,但是肯定不可能。

如果没有存到数据库里比如redis/memcached或者其他,那就只能在内存里。node进程重启无效说明并没有存到进程外部,所以应该是内存里。

不清楚你需要撤销什么,如果是希望token都失效,把秘钥改了就行了。

新手上路,请多包涵

做不到自撤销,但也可以用另一种思路做到相似的自撤销。我是这样做的:

1、每个token都应该有过期时间,一个小时或者十个小时,一般不做永久有效的,我宁愿给某个token十天的有效期,也不会做无限期的。

2、如果需要撤销某个token,那就把该token存到redis中去,设置过期时间避免存储大量的token(这个过期时间比token的过期时间大即可)

3、每次校验token前都先查看redis中是否存在该token;存在:直接认定为无效token;不存在:继续校验token的合法性

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题