Mastodon

Shumaher’s_Blog@AlexZ.me

— yet another stupid personal weblog

Падение популярности OpenID, или Как настроить собственный OpenID-сервер

Прошёл почти год после поста про регистрацию на сайтах, и, к сожалению, моё предсказание о том, что поддержка OpenID будет снижаться, стало сбываться.

И сейчас openid.yandex.ru "радостно" встречает вот такой надписью в шапке:

Яндекс.OpenID

Вот так просто. Прекращает и всё. А на то, что на какие-то сайты нельзя будет зайти, просто потому, что не все веб-мастера выполнят миграцию на OAuth, Яндексу наплевать.

Забегая вперёд, скажу, что уже сейчас потерял доступ к 2-3ём, к счастью не особо важным, аккаунтам.
"Почему сейчас, а не 10 августа?" — спросите, может быть, вы. Потому что на самом деле уже в настоящее время OpenID Яндекса работает не так, как раньше: нельзя залогиниться используя OpenID-идентификатор вида username.ya.ru, хотя он работал и после закрытия Я.ру.

И на всё это Яндексу просто "ну и что". Как и Google.
Вообще, обе компании уже давно не исповедуют принцип "Don't be evil", отключая и закрывая всё подряд. На что конечно имеют право, но... О юзерах-то тоже не мешало бы думать. И хотя Яндекс не быть злым и не обещал, в отличие от "правильного" Гугла...
К чему я вспомнил про Google? Потому что мне кажется, Яндекс отрубает OpenID по примеру Google. Точно так же, как ранее прибил свой jabber-клиент Яндекс.Онлайн, после того как Google отключил S2S-соединения у своего джаббера Google Talk, а затем заменил его на Hangouts.
А ещё были Google Reader, Яндекс.Лента (сейчас стала частью Новостей вроде бы), Яндекс.Закладки — помните такие сервисы? Их нет.

Когда jabber-сервер xmpp.yandex.ru перестанет существовать, я может быть напишу об этом дополнительно. :-)

Так что дело тут не в самом Яндексе, он просто повторяет шаги Гугла. И проблема с OpenID конечно не в отключении одного провайдера. Проблема в снижении популярности технологии в целом, в связи с поголовным переходом сайтов на OAuth. Что может само по себе и не так плохо. Но разница в том, что тогда пользователь привязывается к одному провайдеру, через который решает залогиниться на сайт.
Тогда как привязанные к другим сайтам OpenID-адреса (идентификаторы) можно менять и таким образом не зависеть от какого-то одного провайдера, предоставляющего идентификатор.

Теоретически. На самом деле всё обстоит не так хорошо. Но об этом позже.
На практике, на примерно десяток сайтов из 40, на которых я зарегистрировался при помощи OpenID, уже нельзя зайти этим способом. На большинстве из них пришлось установить пароль, к нескольким подключить Google или Facebook, и лишь 2 перешли на OAuth от Яндекса (причём 1 после моего письма в техподдержку).

Что же со всем этим делать? Конечно —

Самый правильный способ это сменить OpenID-адрес. На нормальных сайтах с этим нет проблем — просто привязывайте другой и всё.
И лучше больше не использовать OpenID-адрес от порталов вроде Яндекса/Google/etc. Мало ли, сколько они проработают.
А значит нужно использовать собственный OpenID-адрес. И вот тут уже возможны варианты:


#1 адрес свой, сервер внешний

При этом способе нужен только обычный хостинг без PHP.
Допустим, адрес вашего сайта http://site.com/, он и будет вашим OpenID URL'ом.
До 10 августа можно всё ещё использовать сервер Яндекса, если вы не хотите заморачиваться со своим собственным.
Согласно документации Яндекса для этого в тег <head> добавьте следующий код:

<link rel="openid.server" href="http://openid.yandex.ru/server/" />
<link rel="openid2.provider" href="http://openid.yandex.ru/server/" />
<link rel="openid.delegate" href="http://openid.yandex.ru/username/" />
<link rel="openid2.local_id" href="http://openid.yandex.ru/username/" />



username естественно надо заменить на свой логин на Яндексе.

Теперь, введя на сайтах http://site.com/ вы зайдёте при помощи сервера Яндекса, но сайт в качестве вашего идентификатора запомнит именно ваш адрес. Это называется делегированием OpenID-адреса.

Другие сервисы, предоставляющие OpenID, можно поискать тут, тут или тут.
Скорее всего, хоть один OpenID у вас уже есть, правда информация уже частично устарела, т.е. некоторые сервисы закрылись.
Поэтому лучше всего использовать


#2 адрес свой, сервер тоже свой

Тут уже нужен хостинг с PHP и немного мозгов.
А ставить будем SimpleID.
Ничего сложного на самом деле нет, и конфиг очень подробно откомментирован, поэтому каждый шаг я расписывать не буду. Если у вас есть хостинг с PHP, вы, вероятно, умеете устанавливать скрипты.
Остановлюсь лишь на паре моментов.

Во-первых, файл config.default.php это НЕ пример конфига, а часть дистрибутива, удалять его не нужно.

Во-вторых, для простоты я устанавливал скрипт в папку /id, поэтому исправьте файл config.php так:

define('SIMPLEID_BASE_URL', 'http://site.com/id');
define('SIMPLEID_CLEAN_URL', true);
define('SIMPLEID_ALLOW_PLAINTEXT', true);


— Вторая строчка включает ЧПУ; не забудьте исправить RewriteBase в .htaccess.
— Третья отключает поддержку SSL, которую по умолчанию требует скрипт. Как правило, на обычных shared-хостингах SSL нет, только на вашем собственном.

Далее по поводу identity-файлов. Имя файла — это логин, под которым надо входить в сервер при запросе с внешнего сайта.
Самые важные строки это:

identity="http://site.com/"
pass="hash:algorithm:salt"
 
[user_info]
name="Name"
...
;address["formatted"]="Address"
 
[sreg]
nickname="Nick"



— Идентификатор должен совпадать с тем URL'ом который будет использоваться для входа на сайты. Тут уже конечный слэш лучше всегда указывать.
— В самом файле куча примеров, как задать пароль.
— Не забудьте раскомментировать секции [user_info] и [sreg] и нужные поля с информацией, которая будет передаваться сайтам.
— По поводу массива address[]: в файле написано, что работать будет только на PHP 5.3. У меня именно такая версия, но при использовании полей адреса скрипт выдавал ошибки. Поэтому для наглядности эта строка здесь закомментирована.

Затем, как и в первом случае, добавьте на страницу по адресу http://site.com/ код:

<link rel="openid.server" href="http://site.com/id/" />
<link rel="openid2.provider" href="http://site.com/id/" />
<link rel="openid.delegate" href="http://site.com/" />
<link rel="openid2.local_id" href="http://site.com/" />



Теперь для новых регистраций вы можете использовать собственный OpenID.
Но как быть если


#3 сменить OpenID нельзя, как и задать пароль, и подключить соцсеть

...или же всё это сделать можно, но нельзя войти в аккаунт, т.к. ваш старый OpenID-адрес больше не работает?
Как, например, вышло с доменами *.ya.ru, о чём я писал в начале.
А ничего не поделать, такая вот безвыходность. :-(
Только писать в support сайта, и надеяться, что вам помогут. У меня пару раз уже получилось.
Гораздо хуже, если писать вообще некуда, но с другой стороны — а нужен ли вам тогда аккаунт на таком сайте?
Вопрос риторический. :-)

Удачных логинов!

VN:F [1.9.17_1161]
Rating: 0.0/5 (0 votes cast)

3 комментариев »

  1. А со своей стороны мы что с юзерами, порегавшихся с OpenID Яндекса делать будем, вручную перепрописывать?

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
    Reply to this commentReply
  2. Arealy, Яндекс вроде понятно пишет что делать.
    Вкратце: авторизовать через Паспорт (OAuth), при этом запросить OpenID-адрес пользователя, найти его в базе сайта и вместо него записать ID пользователя на Яндексе. Затем пользователь будет входить через OAuth.

    VN:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
    Reply to this commentReply
  3. Первый коммент через simpleid

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
    Reply to this commentReply
Оставьте свой комментарий




OpenID WordPress.com Yahoo

Это не спам.