Openid действительно кошмар? Есть ли библиотека с открытым исходным кодом, которая могла бы "абстрагировать" все на внутренний идентификатор?

Я не создаю большие сайты, поэтому я в основном являюсь пользователем openid и его различными реализациями. Я использую openid здесь в SO, и мне это нравится, потому что я использую свою учетную запись gmail для всего (я планирую выйти из gmail в будущем, но теперь я использую ее для всего), поэтому мне не нужно помнить другой логин/учетная запись.

Итак, в моем наивном сознании пользователя, я думаю, что использование openid simple: у вас много провайдеров, когда пользователь пытается войти в систему, ваше приложение спрашивает у своего провайдера: "это кто может войти?", поставщик возвращает "этот пользователь действителен" с некоторыми данными (некоторые могут возвращать больше данных, чем другие) или просто ничего не возвращают, если он, например, был неудачным логином.

Я планировал использовать openid на будущем веб-сайте. На мой взгляд, я думаю, что я бы использовал какую-то библиотеку, которая могла бы "абстрагировать" это для меня: ваш пользователь входит в систему с провайдерами, ваше приложение не знает каждого, и эта библиотека возвращает уникальный идентификатор из имени пользователя из поставщик. Например: [email protected] используется для входа в систему. Он имеет уникальный идентификатор в lib, возвращенный после вычисления хэша или что-то еще, и ваше приложение использует это для всего.

В моем приложении я попытался бы использовать только этот идентификатор, созданный openid libm taht, который обрабатывал бы facebook, twitter, gmail и т.д. Возможно, в этой библиотеке есть таблица с именем поставщика, и когда человек сначала войдет в систему на вашем сайте, у вас есть строка в базе данных, в которой говорится, что "этот уникальный идентификатор из twitter". Теоретически это, похоже, работает в моем сознании.

... но после прочтения Openid - это кошмар, я начинаю думать, действительно ли это была бы хорошая идея, даже пытаясь найти такой lib, который будет работать так прекрасно.

Поскольку у всех (поставщики openid) теперь есть собственный механизм входа, вместо того, чтобы беспокоиться только о одной системе (мой собственный, я должен был создать свой собственный механизм входа) - теперь мне нужно беспокоиться о десятках систем - и openid был Предполагается, что это именно так. Теперь мне нужна огромная библиотека, которую я предвижу, чтобы отвлечь весь этот беспорядок.

Существует ли библиотека, подобная той, которую я описал? Если да, возможно ли создать приложение, которое, по крайней мере, пытается вести себя как действительно "открытый" сон?

(Я знаю, что openid - это не то же самое, что и в facebook auth и т.д.... но с точки зрения конечного пользователя, это же IMHO, "используйте один и тот же логин на сайтах". Я хочу абстрагировать процесс входа в систему, протокол не был сделан именно для этого. Для множества услуг вам просто нужно знать, является ли кто-то, кем она себя заявляет.)

Ответ 1

Библиотеки существуют (например, DotNetOpenAuth), но они обычно только абстрагируют протокол и спецификацию для вас - ваше приложение все еще должно быть в курсе отдельных поставщиков (и их причуды).

Одна из самых больших проблем с OpenId/OpenAuth, на мой взгляд, заключается в том, что многие провайдеры делают вещи несколько иначе: некоторые из них предоставят вам информацию, которую вы просите, а некоторые не будут. Некоторые из них отвечают на Simpleregistration/Claim, некоторые из них отвечают на AttributeExchange/Fetch. Некоторые используют общий URL для входа в систему, для некоторых требуется один с включенным именем пользователя.

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

Существуют службы, такие как RPX/Janrain, которые подразумевают заботу обо всех этих беспорядочных деталях для вас, но я слышал, что даже у этого есть свои головные боли (например, это упоминается в цитированной вами статье).

В конце концов, это, вероятно, сводится к типу веб-сайта, который вы запускаете. Задайте себе этот (довольно циничный) вопрос: насколько мне все равно, если пользователь не может войти в систему? Если ответ "много" (потому что каждый вопрос будет стоить вам денег или вызвать другое горе), то, возможно, забудьте открыть openId на данный момент. Если это массовый/бесплатный веб-сайт, такой как stackoverflow, то это может быть путь.


Обновление

Здесь сравнивается реализация некоторых провайдеров: http://spreadopenid.org/provider-comparison/. Он больше не обновляется, поэтому может быть устаревшим. [Вниз на данный момент, возможно, навсегда, но см. кеш Google]

Возможно, вам удастся найти дополнительную информацию через Список поставщиков Википедии

Здесь также довольно полное сравнение поставщиков здесь.

Ответ 2

Есть библиотеки, которые заботятся обо всем этом, но это зависит от технологий, которые вы используете. Я использовал django-socialauth с Django, и это здорово (поддерживает аутентификацию через Twitter, Facebook, Gmail, Yahoo и OpenID). Существует большой список доступных библиотек здесь.

Ответ 3

Вы не указали язык программирования.

Для Java вы можете посмотреть на socialauth: http://code.google.com/p/socialauth/

Ответ 4

То, что вы описываете, более похоже на то, как работает OAuth, который является своего рода преемником openid (используя термин "преемник" свободно - он получил гораздо больше тяги, чем когда-либо делал OpenID). Для ruby ​​существует несколько доступных реализаций, особенно Janrain Engage, а также недавно библиотека Intridea omniauth. Я использовал Engage и люблю его, но omniauth выглядит мертвым просто, чтобы работать, и его более открытое, поскольку оно не зависит от сервиса Janrain.

Ответ 5

Чтобы добавить еще один ресурс в этот поток, библиотека HybridAuth представляет собой PHP-эквивалент с открытым исходным кодом библиотек, упомянутых выше. Насколько я могу судить, это единственная библиотека, которая охватывает все популярные формы федеративной аутентификации, OAuth и OpenID для PHP. Документация и примеры также очень хороши по сравнению с другими, которые я видел.

Я считаю, что библиотека по-прежнему несколько незрелая, но определенно шаг в правильном направлении для объединения этой аутентификации для разработчиков PHP.

http://hybridauth.sourceforge.net/index.html