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