11

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

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

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

4

1 回答 1

2

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

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

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

希望有帮助。

于 2015-10-11T21:32:09.080 回答