У меня есть несколько сайтов в разных доменах: example.com
, example.org
, mail.example.com
и passport.example.org
. Все сайты имеют общий внешний вид, а должны делиться одной и той же базой пользователей.Прозрачного сеанс пользователя в течение нескольких сайтов (единый вход + единый вход-офф)
И в таком крайнем случае, я все еще хочу, чтобы все сайты в прозрачно (как можно больше) сеансы пользователей доли со следующими основными свойствами:
Единой вход в системе. Когда пользователь входит в
passport.example.org
и посещения любой другой сайт - он должен рассматриваться как войти в системуавторизированные пользователи получают «Hello,
$username
«приветствие в заголовке сайта и различных меню навигации, список услуг, которые они имеют доступ. , Если он не вошел, вместо приветствия есть ссылка «Войти», указывая наpassport.example.org/signon
.Список доверенных доменов известен, поэтому это довольно просто реализовать либо с OpenID, либо с помощью небольшого облегченного протокола. Когда пользователь сначала попадает на сайт , я перенаправляю его на специальную конечную точку аутентификации по адресу
passport.example.org
, , который затем тихо перенаправляет его обратно, с идентификационной информацией (или «не подписанной» анонимным идентификатором). Для большинства браузеров это абсолютно прозрачно. Очевидно, что я использую значения nonce для борьбы с циклами перенаправления.Единый вход. Когда пользователь нажимает «подписаться» в заголовке любого сайта , в следующий раз, когда он посещает какой-либо сайт, его следует рассматривать как «не подписываться».
OpenID не предназначен для этого. Моя текущая идея (у меня уже есть частично работающая реализация ) - это отправить не идентификатор пользователя, а «глобальный» токен сеанса и общий доступ к таблице глобальных сеансов (global_session_token ↔ отношение пользователя) в базе данных.
Роботы и пользователи cookieless-пользователей. Сайты имеют общедоступные зоны, которые должны быть доступны пользователям-агентам без поддержки файлов cookie .
Из-за этого перенаправление, о котором я упомянул в (1), становится проблемой, потому что для запроса каждой отдельной страницы я должен указать пользователю-агенту конечную точку и обратно. Не только это запутает роботов, но и очень быстро загрязнит мою сессионную базу . И я определенно не хочу отображать «эй, у вас нет файлов cookie включен, уйдите!», Это было бы очень грубо и разочаровывает. Хотя мне требуется поддержка файлов cookie для входа в систему, я хочу, чтобы пользователи свободно читали , для чего предназначены сайты и т. Д. - без каких-либо ограничений.
И я явно не хочу положить идентификаторы сессий в URL, для некоторых прозрачных междоменных переадресаций Я уже упоминал, за исключением. Я считаю, что это проблема безопасности и просто вообще Bad Thing.
И здесь у меня почти нет идей.
Хорошо, я знаю, что это трудно, но на самом деле Google делает это как-то с (google.com
, google.
много-оф-оДВУ, gmail.com
и так далее), не так ли? Так что это должно быть возможно.
Я был бы признателен за либо протокол описания идей (которые были бы в лучшем случае) или ссылки к системам (либо код, чтобы читать или просто жить сайты, смотреть и учиться на) уже успешно реализует что-то вроде этого.
Подводя итоги: Несколько доменов без общего корня, общая пользовательская база, единый вход, единый вход, без куки-файлов, необходимых для просмотра анонимно.
Все сайты находятся в одной сети (но находятся на разных серверах), а частично делят одну и ту же базу данных PostgreSQL (отдыхая в разных схемах одной и той же базы данных). Большинство сайтов написаны с помощью Python/Django, но некоторые из них используют PHP и Ruby on Rails. В то время как я думаю о какой-то инфраструктуре и языке-агностике, я благодарен за указание на какие-либо реализации. Даже если я не смогу их использовать, если я получу идею, как это сделать, возможно, я смогу приступить к реализации чего-то подобного.
Нет, это не сложно. Это всего лишь трюк, как карточные трюки. Как только вы знаете, это легко. :-) –