【问题标题】:Can Jwt-Auth in laravel handle invalidated tokens in a multi server configuration?laravel 中的 Jwt-Auth 可以处理多服务器配置中的无效令牌吗?
【发布时间】:2015-12-28 19:19:05
【问题描述】:

我有一个 laravel REST API,它使用 tymondesigns/jwt-auth 进行身份验证,并希望将应用程序从单服务器扩展到多服务器配置,前面有一个负载平衡器。

流程使用 RefreshToken 中间件,本质上是在每次请求后使令牌失效,并与响应一起返回一个新令牌。 (https://github.com/tymondesigns/jwt-auth/wiki/Authentication)

jwt 如何在多服务器配置中管理无效令牌,其中令牌使用一个服务器无效,并且使用无效令牌的新请求在另一台服务器上被命中?

【问题讨论】:

  • 为什么新请求应该使用无效的令牌?用户没有得到新的有效令牌吗?
  • 这正是安全问题。如果黑客得到了一个无效的令牌(忽略他如何获得它的部分),则该令牌可能不会对集群配置中的另一台服务器无效。因此他可以使用它有效的请求。

标签: php rest laravel jwt multiserver


【解决方案1】:

正确的方法是将jti claimexpiat 声明一起包含。

另一种方法是(如果可以的话)在令牌中包含服务器 ID(或唯一密钥)。您可以实现服务器到服务器的 jwt 协议,但我认为这会很昂贵。

另一种方法是您必须在服务器之间同步令牌。我会使用一个 memcached 守护程序(可能在您的前端服务器上),它将维护一个新失效令牌的列表。如果令牌仅对一个请求有效,则 memcached 将在使用时立即收到无效令牌(可能就在 RefreshToken 中间件中)。根据令牌时间戳,您可以确定令牌是否无效(无需转到 memcached 服务器),或者,如果它是相当新的,您将检查 consumed 令牌的 memcached 列表。 memcached 也将有一个过期时间。这种方法有很多优点(例如,您可以使用标签)。如果您将此列表视为日志文件,您仍然可以说您没有使无状态原则失效:)

希望对您有所帮助。

【讨论】:

  • 这应该被接受。正在处理我的旧问题。迟到总比没有好。
猜你喜欢
  • 2016-10-20
  • 2017-11-29
  • 2015-05-21
  • 2019-02-14
  • 2022-07-19
  • 2018-12-18
  • 2017-06-10
  • 2021-09-08
  • 2017-01-06
相关资源
最近更新 更多