1. aristov-a

    26.10.2011

    0 ↑
    0 ↓
    Есть сайт http://www.chess-online.ru/. У него есть аутентификация по OpenId Яндекса. На сайте кнопка, которая перекидывает на Яндекс (http://openid.yandex.ru/trusted_request/) и передаёт туда get-параметры. Яндекс, как обычно, спрашивает - можно ли передать вашу информацию этому сайту и возвращает обратно на шахматный сайт, передаёт опять же get-параметры.
    В чём прелесть - не надо вводить свой OpenId, надо только быть авторизованным на Яндексе.
    Я пытался поискать документацию по http://openid.yandex.ru/trusted_request/, но ничего не нашёл.

    1. Где есть документация по такому способу аутентификации и где почитать официальную документацию Яндекса?
    2. Как удостовериться, что мой callback скрипт получил достоверную информацию о пользователе (Яндекс же передал всю инфу get-запросом, значит, сформировать её мог кто угодно).
    3. Кто ещё кроме Яндекса умеет авторизовывать таким образом?
  2. Ivan Sagalaev

    27.10.2011

    0 ↑
    0 ↓
    1. Наша документация в процессе написания. Но по сути это будет краткое изложение по-русски частей спецификации OpenID. Мы не придмуали ничего своего, это всё стандартное. Про конкретно trusted_root вам знать ничего не нужно, этот адрес достаёт openid-библиотека. Вам, как разработчику, в качестве обобщённого URL'а для всех пользователей надо использовать http://openid.yandex.ru/

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

    3. Так умеют работать все OpenID 2.0 провайдеры.

  3. aristov-a

    27.10.2011

    0 ↑
    0 ↓
    Про конкретно trusted_root вам знать ничего не нужно, этот адрес достаёт openid-библиотека
    Это понянто, но вопрос в том, как работать без библиотек, пользуясь только curl-ом и редиректами.
    Протокол OpenID ... там всё подписано.
    в ответе с Яндекса, кроме более-менее понятных полей мне приходит:
    [openid_assoc_handle] => {HMAC-SHA1}{4ea9bf1e}{r1M/1Q==} (положим, тут способ шифрования. но что ещё?)
    [openid_response_nonce] => 2011-10-27T20:29:18ZKZ8Sb0 (тут какие-то странные буквы после времени)
    [openid_sig] => kAvuE+q4h1VeeBfQErWhafpIes4=

    под подписью Вы имеете в виду openid_sig? если да, то как проверить её достоверность?

    Как я понял из http://openid.net/specs/openid-authentication-2_0.html, провайдеру можно отправить запрос c openid.mode="check_authentication", чтобы удостовериться в подлинности пришедших на "мой" сайт данных. (с английским у меня "так себе")

    >> Exact copies of all fields from the authentication response, except for "openid.mode".
    я пробовал переотправить параметры, которые мне приходят в callback.php, но получил ошибку:
    >> check_authentication request missing required parameter from message
  4. Ivan Sagalaev

    28.10.2011

    0 ↑
    0 ↓

    Это понянто, но вопрос в том, как работать без библиотек, пользуясь только curl-ом и редиректами.

    Это очень плохая идея. OpenID — довольно запутанный протокол, и делать его руками с нуля нет совсем никакого смысла. Получится очередная попытка-недоделка. Посмотрите на LightOpenID, мне её наши яндексовые PHPисты рекомендовали.

  5. aristov-a

    28.10.2011

    0 ↑
    0 ↓
    OpenID — довольно запутанный протокол
    Я же не хочу реализовывать аутентификацию в общем случае. Мне хочется сделать три кнопки: Яндекс, Google, Mail.ru. Авторизовать по произвольному OpenID я не хочу. Я понимаю, что напрямую обращаться по служебному адресу - неправильно, но хочется чтобы аутентификация проходила очень просто с точки зрения кода.

    Моё впечатление, что авторизация может проходить таким образом:
    1. Сделал редирект на провайдера и передал список требуемых параметров.
    2. Получил параметры пользователя от провайдера.
    3. Проверил ответ пользователя, что это реальные данные.

    По-сути, мне от пользователя нужен-то только реальный идентификатор.
    И данные пользователя я уже получаю. Беда только с тем - как их проверить.

    P.s. За ссылку спасибо, посмотрю.
  6. aristov-a

    30.10.2011

    0 ↑
    0 ↓
    Иван, спасибо большое за библиотеку LightOpenID! Под мои потребности очень хорошо подходит!

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.