laravel 中的 Jwt-Auth 可以处理多服务器配置中的无效令牌吗?

Can Jwt-Auth in laravel handle invalidated tokens in a multi server configuration?

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

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

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

正确的方法是包含 jti claim 以及 expiat 声明。

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

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

希望对您有所帮助。