WordPress REST API前后端分离项目JWT身份令牌手动过期方案

WEB领域,为兼容多种平台,现在前后端分离式的项目愈来愈多,没有了传统的Session机制,JWT身份令牌自然成为主流。

JWT(JSON Web Token),原理是后端通过一系列加密和签名措施生成一段字符串,发送给前端,作为前后端数据交流的凭证,支持设定时间,过期自动失效。

与传统Session机制不同的是,JWT令牌一般存储在前端,如此,后端无法控制销毁,而且失效时间一般也不支持修改,因为后端根本没有做任何存储JWT令牌的举措。

然而,实际情况中,确实存在需要后端要立即销毁会话的需求。比如,用户重置密码后需要重新登录,基于旧密码生成的JWT令牌必须立刻失效。

那么,有哪些方式可以完成呢?

  1. 前端主动删除JWT令牌,通常存储在本地缓存中,localstorage和cookie等。治标不治本,但有必要性。
  2. 根据业务安全等级,设置合适的JWT令牌有效时间。只能算是一种优化方式。
  3. 添加黑名单(Blacklist)机制。效果显著。

重点说下黑名单机制,原理是将需要销毁的JWT令牌存储起来,在判断是否有效前查询黑名单列表,进行过滤。

推荐用内存数据库Redis进行存储,还能设置变量过期时间,非常方便。JWT令牌如果过长或不方便直接存储时,用它生成唯一键值也可以,比如md5等,灵活运用,只要能过滤掉需要销毁的JWT令牌即可。

参考资料

https://iamsvkris.wordpress.com/2018/09/17/how-to-logout-when-using-jwt/
https://medium.com/devgorilla/how-to-log-out-when-using-jwt-a8c7823e8a6

(版权归cpury.com所有,转载请注明出处。)