Я почти уверен, что это уже где-то должно существовать, и я просто не знаю термин для него, потому что я не могу его найти.
У меня есть приложение CakePHP. Не слишком важно, что это CakePHP, за исключением того, что это не NodeJS.
У меня также есть приложение NodeJS.
Оба эти приложения делают то, что должны.
В приложении CakePHP есть сеанс пользователя, который он отслеживает для зарегистрированных пользователей, и я могу легко определить, авторизован ли текущий пользователь в этом приложении. Фантастические вещи.
Иногда клиент собирается вызывать приложение NodeJS. Это тоже прекрасно работает. Но иногда это приложение NodeJS должно обслуживать некоторый контент, специфичный для этого пользователя. NodeJS и CakePHP находятся на разных поддоменах.
Как я могу безопасно сказать серверу NodeJS, кто этот пользователь?
Как это работает в моей голове
Очевидно, что не нужно передавать какой-либо идентификатор в виде открытого текста. Моей первой мыслью было зашифровать переменную (UUID, сгенерированный для этого сеанса и временно сохраненный в БД приложением CakePHP), отправить его внешнему интерфейсу, передать его NodeJS, когда ему потребуется доступ к этому серверу, и затем расшифруйте сервер NodeJS. Он получит это расшифрованное значение, спросит PHP, имеет ли он текущий сеанс, связанный с этой переменной, и если он действительно сообщит NodeJS, кто это, так NodeJS может ускорить свой собственный сеанс.
- CakePHP -> Сделать UUID, сохранить его, относящийся к текущему
user_id
, и передать внешнему интерфейсу все, зашифрованные с помощью постоянного ключа X
- Front-end -> Call NodeJS сервер, передавая зашифрованный UUID
- NodeJS -> Расшифровать UUID с помощью ключа X, спросить PHP, есть ли у него связанный пользователь
- CakePHP -> Проверить ассоциированного пользователя, вернуть идентификатор пользователя, если он существует
- NodeJS -> Создает новый сеанс
Чтобы заставить сервер NodeJS думать, что вы пользователь, а не пользователь, вы должны иметь правильно зашифрованный UUID, который существует только для продолжительности пользовательской сессии на сервере CakePHP.
Но , очевидно, шифрование-дешифрование в разных системах, очевидно, изобилует проблемами.
Подобные вещи, безусловно, уже должны быть кем-то обработаны. Каков шаблон для по существу совместного использования сеансов между различными приложениями?