Openid действительно кошмар?Существует ли библиотека с открытым исходным кодом, которая может «абстрагировать» все во внутренний идентификатор? - PullRequest
13 голосов
/ 18 ноября 2010

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

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

Я планировал использовать openid на будущем веб-сайте.По-моему, я думаю, что использовал бы какую-то библиотеку, которая могла бы «абстрагироваться» для меня: ваш пользователь входит в систему с поставщиками, ваше приложение не знает каждого из них, и эта библиотека возвращает уникальный идентификатор из имени пользователя изпоставщик.Например: myemail@gmail.com используется для входа.У него есть уникальный идентификатор в lib, возвращаемый после вычисления хеша или чего-то еще, и ваше приложение использует это для всего.

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

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

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

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

(я знаю, что openid - это не то же самое, что авторизация на Facebook и тому подобное ... но с концас точки зрения пользователя, это то же самое ИМХО, «использовать один и тот же логин на разных веб-сайтах». Я хочу абстрагироваться от процесса входа в систему, даже если протокол был создан не только для этого. Для многих служб вам просто нужно знать, кто-токем она себя утверждает.)

Ответы [ 5 ]

11 голосов
/ 23 ноября 2010

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

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

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

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

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


Обновление

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

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

Здесь также есть подробное сравнение провайдеров .

1 голос
/ 13 июня 2011

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

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

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

1 голос
/ 28 ноября 2010

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

1 голос
/ 27 ноября 2010

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

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

1 голос
/ 27 ноября 2010

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

...