Я уже много исследовал эту тему и сам реализовал множество решений.
Включая OpenID, Facebook Connect (используя старый API-интерфейс Rest API и новый API API OAuth 2.0), войдите в систему с помощью twitter (до сих пор до тех пор, пока я знаю), и т.д..
Но то, что я до сих пор не хватает, - это идеальное решение в одном решении.
Во время моего исследования я наткнулся на некоторые интересные проекты:
- Janrain (ранее RPX) - коммерческое решение
- Gigya - бесплатное, но внешне размещенное решение с javascript и rest apis
- AnyOpenID - бесплатное решение для клиентов, коммерческое для сайтов
Но я не хочу полагаться на внешнего провайдера, и я тоже хотел бы получить бесплатное решение, поэтому я не ограничен в реализации.
Я также видел, как разработчики внедряли одну услугу после очередного послушания, следуя инструкциям поставщиков и настраивая модели и таблицы базы данных для всего.
Конечно, это сработает, но это будет огромная работа и всегда нуждается в разработке и изменениях в вашем приложении и т.д.
То, что я ищу, - это уровень абстракции, который включает все сервисы в один стандарт, который можно интегрировать на моем веб-сайте. После появления новой службы я хочу добавить только одну модель, которая занимается абстракцией этого конкретного провайдера, поэтому я могу легко интегрировать ее в свое приложение.
Или лучше, найдите уже существующее решение, которое я могу просто загрузить.
В идеале эта служба абстракции будет размещаться независимо от моего приложения, чтобы она могла использоваться для нескольких приложений и обновляться независимо.
Последнее из трех решений выше выглядит многообещающим из концепции. Все просто портировано на синтетический OpenID, а на веб-сайте должно быть реализовано OpenID.
Через некоторое время я нашел Django socialauth - систему аутентификации на основе python для веб-страницы Django. Но похоже, что он работает, как описано выше, и я думаю, что это та же система входа, что используется Stackoverflow (или, по крайней мере, некоторые модифицированные fork...).
Я загрузил его и попытался настроить его и посмотреть, может ли он быть настроен как автономное решение, но мне не повезло, поскольку я тоже не вхожу в питон.
Мне бы понравилось решение на базе PHP.
Итак, после этого длинного текста мой вопрос точно таков:
- Как бы вы реализовали SSO, какую-нибудь лучшую идею, чем переносить все и иметь OpenID в качестве основы?
- Каковы плюсы и минусы этого?
- Знаете ли вы какие-либо уже существующие решения? Предпочтительно открытый источник.
Я надеюсь, что этот вопрос не слишком субъективен, спасибо заранее.
Обновление: Я пришел к выводу, что создание прокси/обертки или то, что вы могли бы назвать ее для Facebook, для переноса его на OpenID, чтобы он стал конечной точкой OpenID/провайдером, был бы лучшим вариантом. Так что именно то, что я сделал.
См. мой ответ ниже.
Я добавил щедрость, чтобы получить обратную связь/обсуждение на ней. Маби мой подход не так хорош, как я сейчас думаю!