У меня есть REST API laravel, который использует tymondesigns / jwt-auth для аутентификации и хочу масштабировать приложение с одного сервера на многосерверную конфигурацию с балансировщиком нагрузки впереди.
Поток использует промежуточное программное обеспечение RefreshToken, и по существу токен становится недействительным после каждого запроса, и вместе с ответом возвращается новый. (https://github.com/tymondesigns/jwt-auth/wiki/Authentication)
Как jwt будет управлять недействительными токенами в конфигурации с несколькими серверами, когда токен аннулируется с использованием одного сервера и новый запрос с использованием недействительного токена попадает на другой сервер?
Правильный путь будет включать претензия вместе с exp
а также iat
претензии.
Другим способом является (если вы можете) включить в свой токен идентификатор сервера (или уникальный ключ). Вы можете реализовать межсетевой протокол jwt, но я думаю, что это будет дорого.
Другой способ — синхронизировать токены между вашими серверами. Я бы использовал демон memcached (возможно, на вашем переднем сервере), который будет поддерживать список вновь аннулированных токенов. Если токен действителен только для одного запроса, memcached получит недействительный токен, как только он будет использован (возможно, прямо в промежуточном программном обеспечении RefreshToken). Основываясь на отметке времени токена, вы можете решить, является ли токен недействительным (не заходя на сервер memcached) или, если он довольно новый, вы проверите в списке memcached потребляются жетоны. У memcached также будет время истечения. Этот метод имеет много преимуществ (например, вы можете использовать теги). Если вы думаете об этом списке как о файле журнала, вы все равно можете сказать, что не аннулировали принцип отсутствия состояния 🙂
Надеюсь, это поможет.
Других решений пока нет …