Openid действительно кошмар? Существует ли библиотека с открытым исходным кодом, которая может "абстрагировать" все во внутренний идентификатор?
Я не создаю большие сайты, поэтому я в основном пользователь openid и его различных реализаций. Я использую openid здесь в SO, и мне это нравится, потому что я использую свою учетную запись gmail для всего (я планирую выйти из gmail в будущем, но теперь я использую это для всего), поэтому мне не нужно помнить другой логин / аккаунт.
Поэтому, на мой наивный пользовательский взгляд, я думаю, что использовать openid очень просто: у вас много провайдеров, когда пользователь пытается войти в систему, ваше приложение спрашивает его / ее провайдера: "Может ли этот человек войти в систему?", Провайдер возвращает "этот пользователь действителен" с некоторыми данными (некоторые могут вернуть больше данных, чем другие) или просто ничего не возвращает, если это был, например, неудачный вход в систему.
Я планировал использовать openid на будущем сайте. По-моему, я думаю, что использовал бы какую-то библиотеку, которая могла бы "абстрагировать" это для меня: ваш пользователь входит в систему с поставщиками, ваше приложение не знает каждого из них, и эта библиотека возвращает уникальный идентификатор из имени пользователя из поставщик. Например: myemail@gmail.com используется для входа. У него есть уникальный идентификатор в lib, возвращаемый после вычисления хеша или чего-то еще, и ваше приложение использует это для всего.
В моем приложении я бы попытался работать только с этим идентификатором, созданным openid libm, который будет обрабатывать facebook, twitter, gmail и тому подобное. Возможно, в этой библиотеке есть таблица с именем провайдера, и когда человек впервые заходит на ваш сайт, у вас есть строка в базе данных, говорящая "этот уникальный идентификатор из твиттера". Теоретически, это, кажется, работает в моей голове.
... но после прочтения Openid - это кошмар, я начинаю думать, действительно ли это будет хорошей идеей, даже пытаясь найти такую библиотеку, которая бы так прекрасно работала.
Поскольку каждый (провайдеры openid) теперь имеет свой собственный механизм входа в систему, вместо того, чтобы беспокоиться только об одной системе (моей собственной, я должен был создать свой собственный механизм входа в систему) - теперь мне приходится беспокоиться о десятках систем - и openid должен был решить именно это. Теперь мне нужна огромная библиотека, которую я представляю, чтобы абстрагировать весь этот беспорядок.
Существует ли библиотека, подобная той, которую я описал? Если да, то возможно ли создать приложение, которое, по крайней мере, пытается вести себя как действительно "открытый" сон?
(Я знаю, что openid - это не то же самое, что авторизация в facebook и т. Д., Но с точки зрения конечного пользователя это то же самое IMHO, "использовать один и тот же логин на разных сайтах". Я хочу абстрагировать процесс входа в систему, даже если протокол не Сделано только для этого. Для многих услуг вам просто нужно знать, является ли кто-то тем, кем она себя считает.)
5 ответов
Библиотеки существуют (например, DotNetOpenAuth), но они обычно только абстрагируют протокол и спецификацию для вас - ваше приложение все еще должно знать об отдельных провайдерах (и их особенностях).
Одна из самых больших проблем с OpenId/OpenAuth, на мой взгляд, заключается в том, что многие провайдеры делают вещи немного по-другому: некоторые из них предоставят вам запрашиваемую информацию, а некоторые - нет. Некоторые из них отвечают на Simpleregistration/Claim, некоторые отвечают на AttributeExchange/Fetch. Некоторые используют общий URL-адрес для входа в систему, некоторые требуют один с включенным именем пользователя.
Есть много тонких различий, которые делают OpenId намного слабее, чем должно быть. В идеале это должна была быть система, которую я (как владелец веб-сайта) мог бы внедрить, и я уверен, что теперь я поддерживаю любого пользователя, имеющего учетную запись с поставщиком OpenId. Реальность совсем другая. И вам всегда придется отслеживать своего пользователя по вашим собственным идентификаторам, даже если вы используете OpenId для аутентификации.
Есть службы, такие как RPX/Janrain, которые позаботятся о том, чтобы позаботиться обо всех этих грязных деталях для вас, но я слышал, что даже у этого есть свои головные боли (например, это упоминается в цитируемой вами статье).
В конце дня это, вероятно, сводится к типу веб-сайта, который вы используете. Задайте себе этот (довольно циничный) вопрос - насколько мне важно, если отдельный пользователь не может войти? Если ответ "много" (потому что каждая проблема будет стоить вам денег или вызывать другое горе), возможно, на данный момент забудьте о openId. Если это массовый / бесплатный сайт, такой как stackru, то это может быть путь.
Обновить
Здесь приведено сравнение некоторых реализаций провайдера: http://spreadopenid.org/provider-comparison/. Он больше не обновляется, поэтому может устареть. [В данный момент, возможно, навсегда, но посмотрите кеш Google ]
Вы можете найти больше информации через список провайдеров Википедии
Здесь также есть довольно полное сравнение поставщиков.
Вы не указали язык программирования.
Для Java вы можете посмотреть на socialauth: http://code.google.com/p/socialauth/
Есть библиотеки, которые позаботятся обо всем этом, но это скорее зависит от технологий, которые вы используете. Я использовал django-socialauth с Django, и это здорово (поддерживает аутентификацию через Twitter, Facebook, Gmail, Yahoo и OpenID). Здесь есть большой список библиотек.
То, что вы описываете, так это то, как работает OAuth, что является своего рода преемником openid (он использует термин "преемник" свободно - он получил гораздо большую популярность, чем когда-либо OpenID). Для ruby доступно несколько реализаций, в частности, от janrain. Привлекайте продукт и недавно опубликованную библиотеку Intridea. Я использовал Engage и мне это нравится, но omniauth выглядит просто, чтобы начать работать, и он более открыт в том, что он не зависит от сервиса Janrain.
Просто чтобы добавить еще один ресурс в эту ветку, библиотека HybridAuth представляет собой PHP-эквивалент с открытым исходным кодом из библиотек, упомянутых выше. Насколько я могу судить, это единственная библиотека, которая охватывает все популярные формы федеративной аутентификации, OAuth и OpenID для PHP. Документация и примеры также довольно хороши по сравнению с другими, которые я видел.
Я считаю, что библиотека все еще несколько незрелая, но определенно шаг в правильном направлении для объединения этой путаницы аутентификации для разработчиков PHP.