我是JWT的新手,我最终继承了一个使用JWT的代码库。现在我面临着一些非常根本的问题,我找不到任何答案。这个问题不是基于代码的,所以请耐心等待。
让我们说我的JWT令牌有效期为4小时。这是我的要求/约束
如果用户工作时间为3小时59分钟。他们的会话应延长2小时,不应要求他们重新输入凭证。
客户端java脚本不得以任何方式缓存用户凭据。
可以使用新的JWT令牌刷新JWT令牌......但是您不能在服务器上发出的每个请求上执行此操作。因此,当时机成熟时,客户端必须能够智能刷新JWT令牌。您不得尝试在对应用程序发出的每个请求上发出新令牌,因为我们最终会遇到在会话过程中生成1000个活动令牌并且所有活动令牌都处于活动状态的情况。这使得退出要求变得更加困难。
用户点击退出后。 JWT令牌不再可用。即使它的续航时间仍然有效。
如果发生了退出。发布的所有令牌(作为会话扩展的一部分)应该失效。不只是最后一个。
我开始阅读有关JWT的内容,但似乎JWT无法满足我的要求。使用会话ID方法很容易满足这些要求。但我现在还不想放弃JWT。
答案 0 :(得分:9)
JWT终身延期
您可以使用旧版本发布JWT。您的客户端应用程序必须在接近到期时请求新的JWT。客户端知道读取exp
声明的到期时间,并可以调用刷新服务来获取新令牌。如果客户端应用程序已关闭,则JWT将过期,用户必须再次提供凭据
<强>注销强>
建议让令牌过期,但您可以使用黑名单来存储仍然有效但不能用于身份验证的JWT:
当用户点击退出
刷新接近到期时间的票证
您需要向JWT添加唯一标识符jti
。黑名单将包含jti
和exp
。一旦当前时间> exp
该条目可以被丢弃。