Как сделать единый вход с помощью NodeJS?

У меня есть несколько веб-приложений, работающих на нескольких доменах. Я хочу реализовать Single Sign-On, чтобы пользователь подписал один раз для доступа ко всем приложениям.

Как мне это реализовать? Все приложения используют бэкэнд NodeJS.

Общие указатели в правильном направлении приветствуются.

Ответ 1

Поскольку ваши приложения работают в разных доменах, вы не можете передавать файлы cookie между этими APPS, запущенными на клиентской машине, для проверки пользователя. Так что некоторая информация должна быть передана на сервере.

Самое простое решение, которое приходит мне на ум is-

  1. У вас есть общий сеанс для всех серверов.

  2. Hava-специфический домен аутентификации и перенаправлять пользователей там, где требуется аутентификация. Аутентифицируйте пользователя там и установите cookie сеанса или токен, что хотите.

  3. Всякий раз, когда ваше приложение требует аутентификации, перенаправляйте его на домен аутентификации. Файл cookie проверки подлинности будет передан в домен аутентификации, а также в домене реферера. Если вы уже подтвердили, что сервер аутентификации может перенаправить вас в исходное приложение с соответствующим идентификатором sessionID, который будет установлен как файл cookie для этого домена.

  4. Если аутентификация не выполнена, пользователю будет предложено пройти аутентификацию на сервере аутентификации, а затем произойдет перенаправление.

  5. С небольшими изменениями вы можете добиться этого с помощью токенов и без необходимости использования общих сеансов.

Правильно проверьте правильность состояний перед его внедрением. Больше состояний в вашем механизме означает больше шансов на ошибки и возможные атаки.

Рассмотрите возможность перемещения приложений в одном и том же поддомене. Если механизм аутентификации тот же, то всем известно, что все приложения принадлежат одной и той же компании. Кроме того, людям будет легче запоминать различные поддомены в одном домене, а не запоминать все разные домены.

Ответ 2

Самый используемый проект http://passportjs.org/, который в значительной степени является единственным, с которым я пользуюсь, имеет отличные коннекторы на предпосылках, таких как ADFS и сторонних, таких как google, facebook.