Подтвердите пользователя в другой системе - PullRequest
1 голос
/ 19 апреля 2019

Я почти уверен, что это уже где-то должно существовать, и я просто не знаю термин для него, потому что я не могу его найти.

У меня есть приложение 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.

Но , очевидно, шифрование-дешифрование в разных системах, очевидно, изобилует проблемами.

Подобные вещи, безусловно, уже должны быть кем-то обработаны. Каков шаблон для по существу совместного использования сеансов между различными приложениями?

1 Ответ

2 голосов
/ 20 апреля 2019

Требуются веб-токены JWT или JSON. Они специально для этого https://jwt.io/introduction/

Маркер - это подписанная строка, которая может включать в себя личность пользователя и «утверждения», которые предоставляют средства для предоставления ролей, разрешений или других аналогичных полномочий для пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...