Продвинутый OpenID на твоем Drupal-сайте

аватар: andyceo

Здравствуйте, дорогие мои детишечки!

Сегодня я расскажу вам сказку о том, как подружиться с технологией OpenID на своём Drupal-сайте. Если вы будете себя хорошо вести, будете умными и современными и сможете поставить это - успех в жизни и уважение противоположного пола вам обеспечены. :)

Итак, начнём. Я уже рассказывал тебе, юному любознательному читателю, о технологии OpenID. Если ты ещё не читал, или не в курсе, что это такое, то сначала пойди и почитай. А то когда я начну рассказывать, ты будешь хлопать глазами, зевать, и в туалет проситься. Или к маме. Так что запомни: на эти 10 минут, что ты читаешь, я тебе и папа, и мама, и сам Господь Бог с крыльями.

Гм. Продолжим. Допустим, ты себя хорошо вел и знаешь, что такое OpenID, а также у тебя есть сайт, поднятый на CMS Drupal, на котором ты хотел бы (о да, ты уже взрослый!) ввести продвинутую поддержку OpenID.

Что ты понимаешь под продвинутой поддержкой OpenID - этого я не знаю, но в нашем рассказе под этим будут пониматься следующие фишки:

  1. Возможность пользователю логиниться на твой сайт, используя уже существующий у него OpenID-аккаунт (такие аккаунты предоставляют следующие сервисы: Яndex, LiveJournal, Flickr, Blogger (Blogspot), WordPress.com - это наиболее известные в рунете. Полный список можно найти здесь. Подобные сервисы называются OpenID-провайдерами - т.к. предоставляют OpenID-аккаунт). Таким образом, если пользователь уже имеет аккаунт на вышеупомянутых сервисах, он может залогиниться/создать себе аккаунт по упрощенной процедуре на твоем сайте, практически в два клика.
  2. Дать пользователю OpenID-аккаунт. Это означает, что, зарегистрировавшись на твоем сайте, пользователь сможет затем войти на любой другой сайт, поддерживающий OpenID-логин, указав в качестве OpenID-аккаунта ссылку на свой профиль - http://example.com/user/gooduser. Иными словами, этот пункт означает, что твой Drupal-сайт становится полноценным OpenID-провайдером.
  3. А что делать, если у вашего пользователя уже есть OpenID-аккаунт, скажем, на сервисе LiveJournal, но логиниться на другие сайты он хочет, используя ссылку со своего профиля на вашем сайте (http://example.com/user/gooduser)? В этом случае нам необходимо использовать OpenID-делегирование - т.е. на странице пользователя некоторым способом указать ссылку на его уже существующий OpenID-аккаунт.

Прежде чем мы двинемся дальше, взгляни на эту схему:

Схема работы технологии OpenID
Рисунок 1. Схема работы технологии OpenID

Здесь изображён порядок работы OpenID-аутентификации. В центре - твой сайт. Слева - OpenID-провайдеры (их много, да), а справа - другие сайты, поддерживающие OpenID-регистрацию (их ещё больше). Мы будем считать, что в центре - это профиль пользователя на твоем сайте. Справа - сайты, на которые он хочет залогиниться, указав в качестве OpenID-аккаунта ссылку на свой профиль. А слева - его, пользователя, OpenID-провайдеры, которых, к слову, он может и не иметь вовсе, иметь всего один (на схеме изображен черным цветом), или иметь несколько (на схеме дополнительные связи к другим OpenID-провайдерам указаны серым цветом).

Рассмотрим последовательно наши задачи.

Пункт 1. Возможность логиниться на твой сайт, имея OpenID-аккаунт.

Мой блог, на котором ты сейчас находишься, поддерживает OpenID-регистрацию, и если у тебя уже есть OpenID-аккаунт, ты можешь войти, используя его. Для этого нажми на кнопку "Вход (регистрация)", что в самом верхнем меню ты видишь, юный падаван, а затем, вместо того, чтобы вводить логин и пароль, нажми на "Войти по OpenID". Форма переключится на другую, и тебе будет предложено ввести твой OpenID-аккаунт.

Чтобы достичь такого же эффекта на своем сайте, ты должен включить модуль OpenID - для Drupal 5 его надо дополнительно скачивать, а для Drupal 6 он уже включен в ядро, и его надо просто включить из админки.

Пункт 2. Дать пользователю OpenID-аккаунт.

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

Если вспомнить вышеприведенную схему, твой сайт становится в один ряд с другими OpenID-провайдерами, а центр схемы становится пустым.

Для того, чтобы стать OpenID-провайдером, тебе нужно скачать модуль OpenID Provider и необходимый для его работы модуль XRDS Simple. На данный момент они существуют в dev-версиях и только для Drupal 6. Если посмотреть трекер модулей, то можно найти backport-патчи на Drupal 5. Тем не менее, на раз эти патчи не применяются, приходится кое-что фиксить ручками, и поэтому я прилагаю для скачивания уже пропатченные эти модули для Drupal 5 - смотрите внизу статьи, список приложенных файлов.

Однако, при попытке залогиниться на LiveJournal и написать комментарий, ЛайвЖорнал меня обломал - дескать, не могу тебя пустить, так как сигнатура времени неправильная. На другой какой-то сайт меня пустили. Т.е. корректно модуль не работает. По крайней мере пропатченный до Drupal 5 модуль - под Drupal 6 я их не тестил. Поэтому не могу рекомендовать эти модули для использования на работающем сайте.

Есть другой путь стать OpenID-провайдером, например использовать библиотеку phpMyID (разумеется, она Open-Source GNU/GPL). Однако, у этой библиотеки есть большой минус - она предназначена для работы с одним-единственным пользователем. Т.е. если у тебя есть единоличный блог, где ты - царь и Бог, тогда можно использовать эту библиотеку без каких-либо правок: в корень сайта кидаешь настроечный файл (предварительно переименовав его, например в phpmyidfile.php, и прописав внутри него настройки - логин, пароль, и т.д.), а в HTML-коде главной страницы, в разделе ..., прописываешь необходимые меты -

<link rel="openid.server" href="http://example.com/phpmyidfile.php" />
<link rel="openid.delegate" href="http://example.com/phpmyidfile.php" />

Читай также: Drupal: Как добавить произвольные meta-теги и другие теги в head-область HTML-страницы.

После этого ты сможешь указывать адрес своего сайта в качестве OpenID-аккаунта (Identity URL) на ресурсах, поддерживающих OpenID. Разумеется, этой библиотеке все равно, Drupal-сайт у тебя или другой какой. Будет работать с любым.

Однако, чтобы позволить любому твоему пользователю использовать в качестве OpenID-аккаунта ссылку на свой профиль, тебе придется как-то переписать эту библиотеку. Не сказать бы, что это сложно, но зачем тебе лишние проблемы?

Отчасти решить проблемы тебе поможет решение в пункте 3. Если же подвести однозначный итог данному пункту - тривиального и работающего решения под Drupal не существует (по крайней мере, для версии 5), и придется самому допиливать либо модули OpenID Provider + XRDS Simple, либо библиотеку phpMyID, либо писать новый модуль самому.

Пункт 3. У пользователя уже есть OpenID-аккаунт на стороннем сервисе, а он хочет логиниться на другие сайты, используя не его, а ссылку на свой профиль на вашем сайте (http://example.com/user/gooduser).

Для этого случая есть замечательный модуль OpenID URL. После того, как ты скачаешь и установишь его, зайди в настройки модуля (admin/settings/openidurl) и пропиши необходимые для делегации адреса. На эти адреса будет делегироваться твоя главная страница, следовательно ты можешь указывать в качестве Identity URL адрес своего сайта.

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

После этого, пользователь, изменяя свой профиль, сможет задать необходимые адреса.

Вот как их нужно задавать на примере OpenID-провайдера Яndex:

OpenID Server: http://openid.yandex.ru/server/ (это адрес самого сервера, обрабатывающего OpenID-аутентификацию)
OpenID Delegate: http://openid.yandex.ru/{username}/ (это куда делегируется страница профиля пользователя)
OpenID XRDS Location: http://openid.yandex.ru/{username}/yadis/ (способ авторизации через XRDS)

Вместо {username} нужно подставить свой логин на Яндексе. Если вы уже имеете почту на Яндексе - то автоматически у вас есть и OpenID-провайдер. Подробнее о делегации на Яндекс можно почитать тут.

Ну вот и всё, дорогие мои детишечки. Надеюсь, вы внимательно меня слушали. Ну-ка, сказали доброму дяде спасибо, и быстро все по своим делам! :)

ВложениеРазмер
openid_provider_5.x.zip13.85 КБ
xrds_simple_5.x.zip7.53 КБ

Комментарии

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • You can use the <go> tags just like the <a> for nicer urls.
  • Доступны HTML теги: <a> <img> <noindex> <br> <em> <i> <strong> <b> <strike> <s> <u> <sup> <sub> <h1> <h2> <h3> <h4> <h5> <h6> <cite> <blockquote> <abbr> <code> <ul> <ol> <li> <dl> <dt> <dd> <p> <div> <span> <hr>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <blockcode>. The supported tag styles are: <foo>, [foo]. PHP source code can also be enclosed in <?php ... ?> or <% ... %>.

Подробнее о форматировании

CAPTCHA
Введите, пожалуйста, код, который Вы видите на картинке. Показ изображений в браузере должен быть включен.
CAPTCHA на основе изображений
Введите символы, которые показаны на картинке.
Добавьте страницу в закладки. Перейти к верху страницы
RSS-материал