我有一个laravel REST API,它使用tymondesigns / jwt-auth进行身份验证,并希望将应用程序从单个服务器扩展到多服务器配置,并在前面配备负载均衡器。
流使用RefreshToken中间件,并且在每个请求之后基本上令牌无效,并且与响应一起返回新的令牌。 (https://github.com/tymondesigns/jwt-auth/wiki/Authentication)
如何在多服务器配置中管理无效令牌,其中令牌使用一台服务器无效,而使用无效令牌的新请求在另一台服务器上命中?
答案 0 :(得分:2)
正确的方法是将jti claim与exp
和iat
声明一起包含在内。
另一种方法是(如果可以的话)在您的令牌中包含服务器ID(或唯一密钥)。您可以实现服务器到服务器jwt协议,但我认为这将是昂贵的。
另一种方法是您必须在服务器之间同步令牌。我会使用一个memcached守护进程(可能在你的前端服务器上)来维护一个新的无效标记列表。如果令牌仅对一个请求有效,则memcached将在使用后立即收到无效的令牌(可能在RefreshToken中间件中)。根据令牌时间戳,您可以决定令牌是否无效(无需转到memcached服务器),或者,如果它是新的,您将检入消耗的令牌的memcached列表。 memcached也将有一个到期时间。这种方法有很多优点(例如,你可以使用标签)。如果您将此列表视为日志文件,您仍然可以说您没有使无状态原则失效:)
希望有所帮助。