Pull to refresh

Быстрый старт с openID

Reading time3 min
Views15K
Добрый день, друзья.

Сегодня я хочу поделиться своим опытом внедрения авторизации по openID на своем книжном сайте «Мои книги». Статья рассчитана на начинающих, поэтому вряд ли заинтересует тех, кто уже знает все нюансы этой технологии. Основная ее цель – ответить на вопрос: «да, это удобно, но как же мне сделать такое в моем проекте?!!»



Быстрый старт

Желания ковыряться в больших библиотеках у меня не возникло, так что за основу был взят простой класс Simple OpenID PHP Class.

Для начала отсюда нам понадобятся всего два скрипта: class.openid.php и openid-example.php. Первый — сам класс для работы с openID, второй — образчик его использования, который дальше можно дорабатывать под свои цели. Приятно, что многое прокомментировано. По идее, при правильных настройках сервера тестовый скрипт должен работать уже через 5 минут. Из которых 4 минуты ушло, как ни странно, на выяснение того, что же такое openID-идентификатор.

Список openID

OpenID — замечательная технология. Но скажите — кто придумал, что в роли своего openID пользователь должен указывать что-то вроде
http://id.rambler.ru/users/{логин}/
? Они хотят, чтобы я набирал это, да еще и каждый раз вместо пары логин-пароль?! Извините, мне проще зарегистрироваться как обычно. Это во-первых. Во-вторых, никакого единообразия в записи идентификаторов я не заметил: каждый провайдер придумывает такой вид URL, какой ему заблагорассудится. Посмотрите сами:

http://openid.yandex.ru/{логин}

http://openid.mail.ru/mail/{логин}

http://{логин}.myopenid.com/

http://{логин}.wordpress.com/

http://{логин}.blogspot.com/

http://{логин}.livejournal.com/

http://www.liveinternet.ru/users/{логин}

http://id.rambler.ru/users/{логин}/


В-третьих, почему-то эти адреса никак не фигурируют на страницах openID-провайдеров. Да, все заявляют об их поддержке, но попробуйте, скажем, найти этот URL на странице
http://openid.mail.ru
. Вот именно. Мне тоже пришлось на полдня стать Шерлоком Холмсом, прежде чем я составил свой список.

Удобство или произвольная openID-авторизация

Из сказанного выше вытекает такой момент: дать пользователю возможность вводить произвольный openID URL, или же ограничить его небольшим списком основных провайдеров? Плюс первого варианта: можно авторизоваться с любого сервера. Минус: вынуждаем пользователя запоминать и вводить этот длинный и непонятный адрес. Плюс второго варианта: удобство ввода (выбираем сервер из списка, вводим только логин). Минус: принудительно ограничиваем пользователя только определенным списком серверов авторизации.

Как поступить здесь — каждый решает самостоятельно. Я выбрал второй путь. В конце концов, сложно найти обычного пользователя, у которого нет учетки на Яндексе, Рамблере, ЖЖ или Mail.ru (Гугл в этом плане сильно отличился — я честно пытался понять, как у них сделана openID, но так и не осилил. Если кто-то может объяснить — пишите в комментариях). Так что я составил список основных серверов, из которых пользователь выбирает свой ( посмотреть в действии ).

А дальше?

Ну что ж, авторизация работает, нас перенаправляет на нужный сервер и обратно, скрипт радостно выдает «VALID». Что делать дальше? Дальше необходима еще одна страница, на которой пользователю будет предложено дозаполнить свой профиль. Допустим, мне от пользователя нужен регион и город проживания. E-mail тоже передают не все провайдеры. В-общем, нужно смотреть по ситуации. После того, как профиль заполнен и создан — авторизуем, и дальше пользователь работает как обычно.

Подводные камни

Пока прикручивал openID на своем сайте, пришлось потратить немало нервных клеток. Во-первых, то, что работает на локальном сервере, необязательно будет работать у хостера (даже при наличии curl). Пришлось пробовать другие версии класса (по самой первой ссылке в статье доступны еще два варианта — class.openid.v2.php и class.openid.v3.php).

Еще одним полезным методом в классе является GetAttribute(), которая позволяет взять параметры профиля с openID-сервера (e-mail, полное имя, пол и т.д. – например, вот так: $openid->GetAttribute('email') ). Правда, во второй и третьей версии класса он куда-то исчез, так что нужно добавить:

function GetAttribute($val)
{
return $_GET[«openid_sreg_».$val];
}

В целом, можно считать это джентльменским минимумом, чтобы запустить у себя в проекте авторизацию по openID. Буду признателен за дополнения и замечания.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+41
Comments61

Articles

Change theme settings