Как можно разделить аутентификацию между несколькими (под)доменами?

  1. Неавторизованный пользователь заходит на www.example.com.

  2. Пользователь входит в систему по адресу: https://api.example.com/login.

  3. После успешного входа пользователь перенаправляется на: https://dashboard.example.com

  4. При возврате на: www.example.com - сессия сохраняется, и теперь пользователь может выйти оттуда

Пример показывает Heroku, который разделяет файлы cookie между приложениями, как показано на скриншоте.

cookies от Heroku

Как работает эта установка? Как эту настройку можно имитировать с помощью приложений Rack?


person poseid    schedule 04.01.2013    source источник


Ответы (1)


с использованием методов стиля SSO/OpenID, например, путем перенаправления через формы и передачи токенов аутентификации туда и обратно в параметрах формы.

Например, посмотрите, как это делают stackovervflow и сестринские сайты. Вы можете войти в один, используя другой, и это реализовано через формы и перенаправления.

Для строго поддоменов вы можете просто использовать один файл cookie сеанса, который отправляется на все хосты в пределах «*.domain.com».

person Markus Mikkolainen    schedule 04.01.2013
comment
github.com/josh/rack-openid здесь кажется безрассудной реализацией интеграции openid. посмотрите, как это работает. - person Markus Mikkolainen; 04.01.2013
comment
stackoverflow.com/questions/14137881/ это также может помочь. - person Markus Mikkolainen; 04.01.2013
comment
хм ... похоже, что Heroku также использует какой-то openID, по крайней мере, в URL-адресе после выхода из системы есть «одноразовый номер»; поэтому, возможно, я мог бы что-то сделать с этим: github .com/openid/ruby-openid/blob/master/lib/openid/store/ - person poseid; 04.01.2013
comment
возможно, в любом случае проблемы и технологии одинаковы, поэтому вы можете использовать это для поиска решения, которое вам подходит. В этом случае api.domain.com будет сервером SSO/openid/login, а остальные будут использовать его для аутентификации. В корпоративной среде он также может содержать каталог групп пользователей и прав доступа или ролей. - person Markus Mikkolainen; 04.01.2013