JWT令牌刷新(滑动会话)和注销

时间:2017-02-19 16:51:38

标签: authentication jwt refresh

我是JWT的新手,我最终继承了一个使用JWT的代码库。现在我面临着一些非常根本的问题,我找不到任何答案。这个问题不是基于代码的,所以请耐心等待。

让我们说我的JWT令牌有效期为4小时。这是我的要求/约束​​

  1. 如果用户工作时间为3小时59分钟。他们的会话应延长2小时,不应要求他们重新输入凭证。

  2. 客户端java脚本不得以任何方式缓存用户凭据。

  3. 可以使用新的JWT令牌刷新JWT令牌......但是您不能在服务器上发出的每个请求上执行此操作。因此,当时机成熟时,客户端必须能够智能刷新JWT令牌。您不得尝试在对应用程序发出的每个请求上发出新令牌,因为我们最终会遇到在会话过程中生成1000个活动令牌并且所有活动令牌都处于活动状态的情况。这使得退出要求变得更加困难。

  4. 用户点击退出后。 JWT令牌不再可用。即使它的续航时间仍然有效。

  5. 如果发生了退出。发布的所有令牌(作为会话扩展的一部分)应该失效。不只是最后一个。

  6. 我开始阅读有关JWT的内容,但似乎JWT无法满足我的要求。使用会话ID方法很容易满足这些要求。但我现在还不想放弃JWT。

1 个答案:

答案 0 :(得分:9)

JWT终身延期

您可以使用旧版本发布JWT。您的客户端应用程序必须在接近到期时请求新的JWT。客户端知道读取exp声明的到期时间,并可以调用刷新服务来获取新令牌。如果客户端应用程序已关闭,则JWT将过期,用户必须再次提供凭据

<强>注销

建议让令牌过期,但您可以使用黑名单来存储仍然有效但不能用于身份验证的JWT:

  • 当用户点击退出

  • 刷新接近到期时间的票证

您需要向JWT添加唯一标识符jti。黑名单将包含jtiexp。一旦当前时间> exp该条目可以被丢弃。

请参阅Invalidating client side JWT session