неверный токен паспорта laravel при развертывании на AWS - PullRequest
0 голосов
/ 14 ноября 2018

Моя настройка выглядит следующим образом: У меня есть интерфейс, написанный на Vue.js, API в Laravel 5.6 и инфраструктура на AWS. Все работает в док-контейнерах. У нас есть 4 контейнера API и балансировщик нагрузки между Frontend и API. Аутентификация работает с Laravel Passport v5 и токенами на предъявителя.

В основном все работает нормально, и аутентификация прошла успешно.

Но когда мы развертываем новую версию API, возникает следующая ситуация: 2 экземпляра API имеют версию 1, а 2 других экземпляра API имеют версию 2. Это предназначено, потому что мы хотим иметь непрерывное развертывание без простоев. Через некоторое время 2 экземпляра v1 также заменяются новыми экземплярами v2. Все экземпляры используют одну и ту же базу данных.

К сожалению, в течение этого временного окна аутентификация больше не работает. Похоже, что Frontend делает несколько запросов к API с правильным новым токеном. Балансировщик нагрузки распределяет некоторые запросы к экземплярам v1, а некоторые к v2 isntances. Запросы к экземплярам v2 выполнены успешно, к экземплярам v1 - нет (401 не авторизован).

Мой вопрос: как паспорт проверяет токен на предъявителя? Почему экземпляр v1 не может проверить токен, который был создан экземпляром v2, и наоборот? Что я могу наблюдать за различиями между экземплярами и паспортом влияния, даже если все они используют одну и ту же базу данных?

1 Ответ

0 голосов
/ 03 декабря 2018

Мы решили проблему, и я объясняю ее тем, кто интересуется: Проблема заключается в том, что в рамках нашего процесса развертывания мы всегда вызываем ремесленную команду «php artisan passport: keys», чтобы заставить паспорт работать в новом док-контейнере.

Если вы внимательно посмотрите на эту команду, она генерирует 2 файла: oauth-private.key и oauth-public.key

Эти файлы имеют решающее значение для генерации токенов на предъявителя. Дело в том, что если у вас есть несколько Docker-контейнеров API с разными oauth-файлами, они не могут проверять токены друг друга.

Таким образом, решение состоит в том, чтобы изменить развертывание и всегда развертывать одни и те же oauth-файлы.

...