Здравствуйте, дорогие мои детишечки!
Сегодня я расскажу вам сказку о том, как подружиться с технологией OpenID на своём Drupal-сайте. Если вы будете себя хорошо вести, будете умными и современными и сможете поставить это - успех в жизни и уважение противоположного пола вам обеспечены. :)
Итак, начнём. Я уже рассказывал тебе, юному любознательному читателю, о технологии OpenID. Если ты ещё не читал, или не в курсе, что это такое, то сначала пойди и почитай. А то когда я начну рассказывать, ты будешь хлопать глазами, зевать, и в туалет проситься. Или к маме. Так что запомни: на эти 10 минут, что ты читаешь, я тебе и папа, и мама, и сам Господь Бог с крыльями.
Гм. Продолжим. Допустим, ты себя хорошо вел и знаешь, что такое OpenID, а также у тебя есть сайт, поднятый на CMS Drupal, на котором ты хотел бы (о да, ты уже взрослый!) ввести продвинутую поддержку OpenID.
Что ты понимаешь под продвинутой поддержкой OpenID - этого я не знаю, но в нашем рассказе под этим будут пониматься следующие фишки:
http://example.com/user/gooduser. Иными словами, этот пункт означает, что твой Drupal-сайт становится полноценным OpenID-провайдером.http://example.com/user/gooduser)? В этом случае нам необходимо использовать OpenID-делегирование - т.е. на странице пользователя некоторым способом указать ссылку на его уже существующий OpenID-аккаунт.Прежде чем мы двинемся дальше, взгляни на эту схему:

Здесь изображён порядок работы OpenID-аутентификации. В центре - твой сайт. Слева - OpenID-провайдеры (их много, да), а справа - другие сайты, поддерживающие OpenID-регистрацию (их ещё больше). Мы будем считать, что в центре - это профиль пользователя на твоем сайте. Справа - сайты, на которые он хочет залогиниться, указав в качестве OpenID-аккаунта ссылку на свой профиль. А слева - его, пользователя, OpenID-провайдеры, которых, к слову, он может и не иметь вовсе, иметь всего один (на схеме изображен черным цветом), или иметь несколько (на схеме дополнительные связи к другим OpenID-провайдерам указаны серым цветом).
Рассмотрим последовательно наши задачи.
Мой блог, на котором ты сейчас находишься, поддерживает OpenID-регистрацию, и если у тебя уже есть OpenID-аккаунт, ты можешь войти, используя его. Для этого нажми на кнопку "Вход (регистрация)", что в самом верхнем меню ты видишь, юный падаван, а затем, вместо того, чтобы вводить логин и пароль, нажми на "Войти по OpenID". Форма переключится на другую, и тебе будет предложено ввести твой OpenID-аккаунт.
Чтобы достичь такого же эффекта на своем сайте, ты должен включить модуль OpenID - для Drupal 5 его надо дополнительно скачивать, а для Drupal 6 он уже включен в ядро, и его надо просто включить из админки.
Итак, твоему сайту необходимо стать 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, либо писать новый модуль самому.
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.zip | 13.85 КБ |
| xrds_simple_5.x.zip | 7.53 КБ |
Комментарии
Отправить комментарий