1. Loki

    10.02.2010

    0 ↑
    0 ↓
    Прочел заметку в блоге: http://softwaremaniacs.org/blog/2008/10/28/rutube-openid-login/
    Но так и не понял как в этом случае проверяется подлинность пользователя.
    В привычной мне схеме пользователь и консумер независимо связываются с провайдером, после чего консумер сравнивает то, что "принес" от провайдера пользователь с тем, что ответил провайдер.
    В случае же использования аякса, как я понимаю, с провайдером общается только консумер. А в этом случае мне непонятно как установить подлинность пользователя.
  2. Ключевое слово - "checkid_immediate"

    описание в спецификации

  3. Иван Сагалаев

    11.02.2010

    1 ↑
    0 ↓

    Чистым ajax'ом там, похоже, и не получится: сайт консумера не может сделать ajax-запрос из браузера пользователя на сайт провайдера, потому что это другой домен. Поэтому там надо вешать iframe, который будет тихо редиректиться на сайт провайдера, получать подтверждение и редиректиться обратно на URL консумера, который уже будет доступен из javascript'а основной страницы.

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

  4. Юрий Апостол

    11.02.2010

    0 ↑
    0 ↓
    Где-то видел вариант со всплывающим окном, когда нужно показать страницу провайдера.
  5. Иван Сагалаев

    11.02.2010

    1 ↑
    0 ↓

    А это отдельный флажок есть, который говорит провайдеру, что надо показывать интерфейс, пригодный для окна.

  6. Loki

    13.02.2010

    0 ↑
    0 ↓
    А это отдельный флажок есть, который говорит провайдеру, что надо показывать интерфейс, пригодный для окна.
    Вот не стал бы вводить пароль от своего аккаунта ни в каких окошках. Пока не убедишься где именно находишься, вводить свои данные - чистое безумие. Так что подобная реализация кажется мне неразумной.
    iframe, который будет тихо редиректиться на сайт провайдера, получать подтверждение и редиректиться обратно на URL консумера
    Правильно ли я понимаю: сначала мы дергаем провайдера в режиме checkid_immediate, и он подтверждает подлинность юзера если тот авторизован. Если же юзер не авторизован, то провайдер ничего не подтверждает и юзера надо его перекинуть на провайдера (ну и далее по стандартной схеме).

    Кстати, я немного запутался - чем отличается Claimed Identifier от Identifier?
  7. Иван Сагалаев

    13.02.2010

    1 ↑
    0 ↓

    Правильно ли я понимаю: сначала мы дергаем провайдера в режиме checkid_immediate, и он подтверждает подлинность юзера если тот авторизован. Если же юзер не авторизован, то провайдер ничего не подтверждает и юзера надо его перекинуть на провайдера (ну и далее по стандартной схеме).

    Да, примерно так. Ещё точнее, юзер должен быть не только авторизован у провайдера, но и уже один раз подтвердить, что про вход на этот сайт-консумер его спрашивать не надо.

    Кстати, я немного запутался - чем отличается Claimed Identifier от Identifier?

    Identifier — это то, что юзер ввёл в input (плюс нормализация). А claimed — это то, что сервер подтвердил в качестве OpenID пользователя. Они различаются, когда юзер вводит адрес всего сервера в качестве идентификатора.

  8. Loki

    15.02.2010

    0 ↑
    0 ↓
    Теперь вроде все ясно. Спасибо.
  9. arsen

    19.02.2010

    0 ↑
    0 ↓
    А случаем не наоборот ли, claimed (заявленный) тоесть тот что юзер ввел?
  10. Иван Сагалаев

    19.02.2010

    2 ↑
    0 ↓

    Вообще да, правда. Точнее, то, что он ввёл + нормализация. А слово "identifier" это просто общий термин для всех идентификаторах на всех этапах жизни.

  11. arsen

    24.03.2010

    1 ↑
    0 ↓
    Да, да. Вот как пример приведу в чем их отличие (как я понял из спецификации) на примере openid.yandex.ru:

    Пользователь ввел:

    http://openid.yandex.ru/username/
    Но сервер говорит, что у юзера идентификатор как https://username.ya.ru

    Вот в примере, http://openid.yandex.ru/username/ есть - "claimed", а https://username.ya.ru это "identifier".

    На стороне клиента поэтому юзера надо сопоставлять всегда по "identifier". Так как "claimed" может различаться, например при делегировании OpenID идентификатора.

    PS. Если я не прав, поправьте меня :)
  12. Иван Сагалаев

    24.03.2010

    0 ↑
    0 ↓

    http://openid.yandex.ru/username/ Но сервер говорит, что у юзера идентификатор как https://username.ya.ru

    Если речь конкретно про Яндекс, то так не должно быть в принципе. Есть два разных вида идентификатора (если у пользователя есть дневник на Я.ру), и они ничего общего друг с другом не имеют. Пользователь может пользоваться отдельно тем или другим.

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