【问题标题】:Blacklist old token on reauthenticate with Laravel JWT使用 Laravel JWT 重新认证时将旧令牌列入黑名单
【发布时间】:2016-08-31 18:13:25
【问题描述】:

我正在使用 Laravel 5.2 和 tymondesigns/jwt-auth

如果用户在没有注销的情况下再次登录,是否可以将旧令牌列入黑名单?我很好奇旧令牌的安全性。

关于如何改进移动设备上的“始终登录”的任何建议,因为我目前使用 Laravel 作为 API。

我当前的配置是:ttl = 1 小时 & refresh_ttl = 2 周

【问题讨论】:

    标签: api laravel laravel-5.2 jwt


    【解决方案1】:

    您可以在用户第一次登录时创建一个表来存储令牌。

    当该用户再次登录时,您会(从您的表中)获取旧令牌,然后将旧令牌列入黑名单,使用登录后立即生成的新令牌更新表。

    【讨论】:

      【解决方案2】:

      其实@Jeff 的回答可能会解决问题。我需要使用jwt.refresh 中间件。

      我的 JWT 黑名单不起作用,因为我使用 array 作为 CACHE_DRIVER

      我已经测试了将其恢复为file,因为CACHE_DRIVERjwt.refresh 是有效的,旧令牌应该被列入黑名单。

      我将此标记为答案。谢谢你,杰夫。

      【讨论】:

      • 我已将 CACHE_DRIVER 值更改为文件,现在登录和注销工作正常。但对于其他 API 则返回此错误。 “Repository.php 第 367 行中的 BadMethodCallException:此缓存存储不支持标记。”
      【解决方案3】:

      您可以使用jwt.refresh 中间件,它会发回一个新令牌作为响应头。如果您启用了黑名单,旧令牌将立即被列入黑名单。只需在您的登录路径中包含jwt.refresh,然后确保捕获响应标头并更新您的本地密钥。然后你可以让你的ttlrefresh_ttl无限制(即60*60*24*365*10

      【讨论】:

      • 我已经添加了jwt.refresh,我可以看到每个请求都在刷新令牌,但旧令牌并未列入黑名单。我检查了我的 jwt 配置文件,黑名单已经启用。有什么想法吗?
      • 嗯,您是否启用了宽限期? 'blacklist_grace_period' => 0,
      • 仍然无法将旧令牌列入黑名单。仍然不知道为什么以及如何解决这个问题。实际上,我在这个项目中使用SampleApi
      猜你喜欢
      • 2020-01-22
      • 2021-01-06
      • 2017-11-23
      • 2020-01-20
      • 2021-06-12
      • 2019-02-23
      • 2016-12-30
      • 2020-05-20
      • 2020-09-25
      相关资源
      最近更新 更多