Я хочу реализовать дискретный удаленный сервер аутентификации, который обрабатывает вход для многих сайтов. Несколько похоже на OpenID.
По сути, у меня есть site-1 и site-2, и они оба зависят от одной пользовательской базы данных, которая находится на отдельном auth-сайте. Таким образом, сайт авторизации обрабатывает аутентификацию пользователя для них и в ходе этого процесса делает информацию об аутентифицирующем пользователе доступной запрашивающей системе.
Каждый сайт может находиться на совершенно отдельном доменном имени, на совершенно разных машинах.
Это все через HTTP (S), прямой доступ к базе данных невозможен.
Есть еще одна странная особенность: после входа пользователя на сайт-1 при обращении к любому другому сайту, зависящему от auth-сайта, сайт должен рассматривать пользователя как уже аутентифицированного.
Весь этот бизнес должен быть полностью беспрепятственным для конечного пользователя. Он должен работать как простая ежедневная форма входа в систему.
В качестве конкретного примера, скажем, мы говорим о stackoverflow.com
и serverfault.com
, и они оба аутентифицируются с помощью authentic-overflow-server-stack.com
. Опять же, войдя на один из сайтов, я могу перейти на другой и заняться бизнесом без повторного входа.
Что я хотел бы знать, так это общий механизм взаимодействия между сайтами, стоящими за этим сценарием.
В моей конкретной настройке я использую Rails, но я не ищу код [1], просто общие рекомендации и рекомендации, поэтому не стесняйтесь отвечать псевдокодом или любым общедоступным языком. OTOH, имейте в виду, что в моем наборе инструментов будут достойные MVC, REST и метапрограммирование.
[1]: если только вы не знаете существующее крошечное чистое бесплатное MIT / BSD-лицензированное приложение / плагин / генератор, который обрабатывает это.