Создание и проверка своего OpenID
Я уже писал ранее о возможности использования OpenID для авторизации на различных сайтах, а также о том, что у многих из вас свой OpenID, скорей всего, есть - почта Яндекса и Google, живой журнал и многое другое. Теперь мы поговорим о более интересной теме - создании своего собственного OpenID. Правда, для этого уже понадобится наличие собственного сайта.
Начать стоит с того, что технология OpenID позволяет осуществлять делегирование прав на авторизацию. Суть делегирования проста. Допустим, у вас уже есть один идентификатор OpenID, например, на живом журнале. А вам хочется сделать OpenID с более красивым адресом, например, http://sander.su/. Тогда вам достаточно по желаемому Web-адресу разместить "объявление о делегировании", указывающее две вещи: сервер, проводящий авторизацию и уже имеющийся OpenID. Тогда при попытке авторизации где-либо при помощи http://sander.su/, та система автоматически авторизуется при помощи живого журнала, но в результате в качестве OpenID высветится красивый адрес.
Объявление о делегировании - это всего лишь два link rel тэга в заголовке html-файла. Тем самым, для того чтобы иметь свой красивый OpenID достаточно лишь иметь свой сайт и прописать эти самые тэги. Приведу их значения для наиболее популярных OpenID-провайдеров.
- Для живого журнала (замените __sander__ на свой ник):
‹link rel="openid.server" href="http://www.livejournal.com/openid/server.bml" /›
‹link rel="openid.delegate" href="http://users.livejournal.com/__sander__" /› - Для liveinternet (замените yourname на свой ник):
‹link rel="openid.server" href="http://www.liveinternet.ru/openid.php" /›
‹link rel="openid.delegate" href="http://http://www.liveinternet.ru/users/yourname" /› - Для почты Яндекса (замените yourname на начало адреса вашей почты)
‹link rel="openid.server" href="http://openid.yandex.ru/server.xml" /›
‹link rel="openid.delegate" href="http://openid.yandex.ru/users/yourname" /› - Для специального сервиса, предоставляющем OpenID
‹link rel="openid.server" href="http://www.myopenid.com/server" /›
‹link rel="openid.delegate" href="http://samruby.myopenid.com/" /›
Описанный способ всем хорош, но меня не устраивает. Почему если у меня уже есть сайт, мою личность должен подтверждать какой-то посторонний живой журнал? Поэтому расскажу, как можно создать своего собственного поставщика OpenID. Способов, конечно, много, но ставить большой сервер ради одного пользователя - это как стрелять их пушки по воробьям. Имеется более элегантное решение - поставить сервер, предоставляющий один единственный идентификатор OpenID. В таком случае и установка становится крайне простой - достаточно, чтобы на вашем сайте была включена поддержка php, желательно, с включенным модулем bcmath.
Скачайте phpMyID с этого сайта или с сайта производителя.. Программа свободная, распространяется по лиценции GPL. Раззипуйте. Нужно отредактировать файл index.php. Поля, которые необходимо заполнить, я отметил многократными восклицательными знаками.
- auth_username: логин, который будет спрашивать ваш сервер
- auth_password: результат шифрования алгоритмом MD5 строки "логин:phpMyID:пароль"
- nickname: некоторые сайты отображают nickname вместо адреса сайта
- email: электронная почта, не обязательно
Программу для шифрования строки по алгоритму md5 можно скачать здесь или с сайта разработчика. Синтаксис в командной строке: md5 -d"text", где text - шифруемая строка.
После этого вы можете закинуть директорию со скриптом на сервер. Проверьте, что ваш OpenID работает, например, здесь или залогинившись на моем сайте. Однако, в качестве OpenID идентификатора приходится указывать путь к файлу index.php, что, наверное, не совсем то, что вы хотели. Завершаем стандартным способом - применяем делегирование. Оба link rel-тэга openid.server и openid.delegate должны указывать на ваш файл index.php.
Как я уже писал ранее, Google изменил стандарт OpenID 1.0. Пунктов 3-4 при стандартной авторизации по OpenID 1.0 быть не должно. Поэтому напрямую аккаунты Google использовать для OpenID атвторизации в старом стиле невозможно. Даже если у вас сайт от Гугла, рекомендую поставить OpenID-провайдера, как было показано выше. Однако Google поддерживает стандарт Open 2.0 c Directed Identity. Любой пользователь Google может ввести в качестве своего идентификатора специальный адрес: https://www.google.com/accounts/o8/id (не надо никуда подставлять свой идентификатор!). Google сам определяет, кто ты, я возвращает информацию на сайт. Правда, даже Google Friend Connect обрабатывает эту информацию странным образом - пишет, что "id" присоединился к сайту.
Дата: 24 февраля 2009 г., категория: для вебмастеров.
| ← Использование торрентов | Windows script host или приколы нашего городка → |
Комментарии
1# |
Вот я принял Ваше приглашение и пришел на Ваш блог. Могу сказать, что очень много интересного и полезного, а также неизвестного для меня ранее. Сейчас буду делать себе свой собственный OpenID по Вашей инструкции. Спасибо. Заходите и Вы ко мне еще раз и раз, приятно общаться с Вами и получать от Вас полезные советы. Благодарю. |
2# |
Да, то что в качестве пути к своему OpenID придется прописывать путь к файлу index - это не удобно, надо как-то заполучить короткий и красивый номер, чтобы он всегда был в памяти. |
3# |
Sander, а можно технологию создания красивых адресов описать в своем блоге, со ссылкой на Ваш, конечно. |
4# |
Отлично, рад, что статья пригодилась. На Ваш блог подписался, буду читать.
|
5# |
Здравствуйте, спасибо за статью. А не подскажите, где конкретно меняются значения auth_username, auth_password, nickname и email? |
6# |
В архиве, который можно у меня скачать, есть файл index.php
|
7# |
А понял, это не в MyID.php а в MyID.config.php находится |
8# |
> А понял, это не в MyID.php а в MyID.config.php находится
|
9# |
Большое спасибо за статью!
|
10# |
О! Почитал комменты внимательно, оказывается файл был намеренно переименован. |
11# |
Обращаю внимание, что после отправки коммента на вашем сайте вылезло сообщение:
|
12# |
В ЖЖ мой ОпенИД был принят, а вот афиша.ру не хочет принимать. Интересно почему? Возможно они только логины с нескольких "больших" сайтов принимают типа ЖЖ и фейсбука... |
13# |
clubfonar.ru
|
14# |
Вроде бы исправил про Warning, еще раз спасибо |
15# |
Варнингом не хотел пугать пользователей (думал примешь к сведению и просто удалишь коммент после прочтения), просто надо же как-то дать знать веб-мастеру. Просто не смог, так сказать пройти мимо, хотя это было бы конечно же проще.
|
16# |
По поводу афиши даже интересно.
|
17# |
Пробовал тэги переставлять и в самое начало и в самый конец - не помогает. |
18# |
Странно. Тогда не могу понять, где отличие. Попробую повозиться, когда осяду в Москве. |
19# |
Проверка Open ID |
20# |
glubina-lzhi
|
21# |
Уважаемый Сандер!
|
22# |
Александр, нужно открыть командную строку. В windows это делается так: нажимаются одновременно win+r, в окошке вводится cmd, нажимаете ok.
|
23# |
Скачанный файл по вашей ссылке md5.exe переместил на диск C. Путём простого копирования. При клике на него открывается пустое окно командной строки с мигающим пунктиром.
|
24# |
Александр, а вы поставили пробел между md5 и -d?
|
25# |
Sander - ну да, я понимаю, что латиницей... Глуп я конечно, но не до такой степени :-)
|
26# |
Получилось!!!
|
27# |
Отлично, значит, продвинулись!
|
28# |
Сделал OpenID как написано тут - sindicollo.blogspot.com/2007/12/openid.html - потому что так проще показалось чем как у вас написано. Так у вас здесь с таким OpenID не получается авторизоваться, пишет:
|
29# |
мне кажется, регистр здесь значения не имеет... |
30# |
Здравствуйте, спасибо за подробную инструкцию, все понятно, сделала, мой сайт выбранный логин-пароль принимает, но сторонние не хотят совсем...
|
31# |
попробовала опичанный вами выше способ авторизации через жж, но жж не хочет авторизовать чужие сайты. получилось только с myopenid.com, только надо бы поменять уголки на < |
32# |
Смотрю, в результате все получилось, пусть и через myopenid
|
33# |
к сожалению жж просто не пускает даже в аккаунт зарегиный на openid юзера, он усеченный. |