Уверен, вам не раз подалась на глаза аббревиатура OpenID. Вполне возможно у вас сложилось мнение, что это эдакая модная штуковина, о поддержке которой все чаще заявляют различные популярные проекты. По большому счету так и есть, но зачем эта технология на самом деле нужна? Предположим, вы заядлый блоггер, у вас имеется учетная запись на wordpress.com, но случилось вам прочесть сообщение в чужом дневнике и возникло непреодолимое желание оставить автору комментарий. Но вот незадача – чужой дневник оказался на livejournal.com. Неужели только для того, чтобы оставить комментарий вам придется регистрироваться на «вражеском» блог-хостинге?! А вот и нет. В форме авторизации livejournal.com имеется малозаметная ссылка «Войти по OpenID». Вы переходите по этой ссылке, вводите свой идентификатор с wordpress (скажем, ivan.wordpress.com). Открывается «родной» wordpress.com и лукаво прищурившись интересуется у вас «Do you want to pass your identity to this “soup-admirers’ site”?». Вы скрепя сердцем жмете «Yes; just this time», после чего оказываетесь на той злополучной странице livejournal.com c формой добавления комментария. Но (!) на этот раз вы авторизованы на ЖЖ под своей «вордпресосвской» учетной записью. Наконец-то можно оставить комментарий. Не пройдет много времени как в адрес OpenID прозвучит очередное «Wow!», но уже от пользователя livejornal.com, спешащего вернуть вам ответ.
OpenID – это децентрализованная система единой регистрации. Это несколько шире, чем заявлено на wordpress.com: «OpenID – это открытый стандарт, который позволяет вам авторизоваться на чужих сайтах, используя вашу учетную запись WordPress.com» :) Если вы зарегистрированы в проекте, являющимся, помимо прочего, провайдером OpenID, вы сможете авторизоваться под этой единственной учетной записью на любом сайте, поддерживающим OpenID. Звучит замечательно, идея – фантастика, но возникает резонный вопрос: «А много ли таких проектов, поддерживающих OpenID или это вопрос непредсказуемого будущего?». В принципе, не мало. Уже заявлено порядка 1200 сайтов, поддерживающих OpenID и каждый день прибывает 10-15 новых. Среди этих сайтов немало популярных проектов: Livejournal.com, Jyte.com, Vox.com. Wikitravel.org, Zooomr.com, Ma.gnolia.com, Movabletype, Iconbuffet.com, Basecamphq.com. Существуют модули интеграции для такого популярного ПО, такого как Wordpress, Joomla!, Plone, Drupal. MediaWiki, CakePHP, Symfony Framework. О поддержке технологии заявили Microsoft и AOL. Поддержка OpenID будет реализована в Firefox 3.0.
Но как использовать OpenID на своем сайте? Если вы собираете проект на фреймворке CakePHP или Symfony, вам достаточно настроить плагины CakePHP OpenID component и sfOpenIDPlugin соответсвенно. Если вы не используете фреймворк, но просто желаете привлечь пользователей лояльностью к регистрации на вашем проекте (быть может стартапе), проще всего воспользоваться маленькой библиотекой Simple OpenID PHP Class. В комплекте, доступном для скачивания помимо библиотеки, имеется скрипт примера, где в доступной форме показано как авторизовать пользователя посредством протокола OpenID. Единственная неприятность, с которой вы можете столкнуться – данная библиотека использует функции библиотеки расширения PHP Libcurl. Т.е. если ваш PHP собран с опцией --with-curl – все замечательно. Иначе использовать эту библиотеку едва ли получиться. Автор этого решения был вынужден использовать специфичные функции там где можно было бы обойтись более традиционными методами HTTP-запроса из-за того, что многие провайдеры OpenID требуют SSL-соединения.
Если же вы настроены более серьезно и собираетесь реализовать полноценное управление учетными записями пользователей в своем проекте, опираясь на популярные решения, такие как OpenID, LID (Light-Weight Identity) и Yadis воспользуйтесь библиотекой NetMesh InfoGrid LID PHP. Стоит также обратить внимание на PHP OpenID library. Однако в данном случае вам потребуется консольный PEAR-инсталлятор.
В заключении надо сказать, что имеется ряд нареканий к OpenID касательно уязвимости в безопасности. На мой взгляд, также необходимость чтения целостной HTML страницы для последующего анализа тегов микроформата – подход крайне неэффективный (в спецификации OpenID 2.0 запрашивается документ XRDS или Yadis-документ). Хотелось бы использовать REST, но на этот счет есть некоторые сомнения. Тем не менее, OpenID — как раз тот случай, когда замечательная идея все же работает. Так, что лично я буду рад, если смогу воспользоваться своей учетной записью OpenID на собранном вами новой оригинальном многообещающем проекте.
Оригинал статьи в PDF
P.S. Текущая версия Simple OpenID PHP Class некорректно обрабатывает пользователей ЖЖ. Лекарство: добавить в начало функции CURL_Request() (class.openid.php) следующую проверку:
if(isset($params[«openid.mode»])) $method = «POST»;