-
Прочел заметку в блоге: http://softwaremaniacs.org/blog/2008/10/28/rutube-openid-login/
Но так и не понял как в этом случае проверяется подлинность пользователя.
В привычной мне схеме пользователь и консумер независимо связываются с провайдером, после чего консумер сравнивает то, что "принес" от провайдера пользователь с тем, что ответил провайдер.
В случае же использования аякса, как я понимаю, с провайдером общается только консумер. А в этом случае мне непонятно как установить подлинность пользователя. -
Ключевое слово - "checkid_immediate"
-
Чистым ajax'ом там, похоже, и не получится: сайт консумера не может сделать ajax-запрос из браузера пользователя на сайт провайдера, потому что это другой домен. Поэтому там надо вешать iframe, который будет тихо редиректиться на сайт провайдера, получать подтверждение и редиректиться обратно на URL консумера, который уже будет доступен из javascript'а основной страницы.
Immediate-режим нужен всего лишь для того, чтобы показать провайдеру, что не имеет смысла показывать пользователю страницу с подтверждением, потому что пользователю её негде показать.
-
Где-то видел вариант со всплывающим окном, когда нужно показать страницу провайдера.
-
А это отдельный флажок есть, который говорит провайдеру, что надо показывать интерфейс, пригодный для окна.
-
А это отдельный флажок есть, который говорит провайдеру, что надо показывать интерфейс, пригодный для окна.Вот не стал бы вводить пароль от своего аккаунта ни в каких окошках. Пока не убедишься где именно находишься, вводить свои данные - чистое безумие. Так что подобная реализация кажется мне неразумной.
Правильно ли я понимаю: сначала мы дергаем провайдера в режиме checkid_immediate, и он подтверждает подлинность юзера если тот авторизован. Если же юзер не авторизован, то провайдер ничего не подтверждает и юзера надо его перекинуть на провайдера (ну и далее по стандартной схеме).iframe, который будет тихо редиректиться на сайт провайдера, получать подтверждение и редиректиться обратно на URL консумера
Кстати, я немного запутался - чем отличается Claimed Identifier от Identifier? -
Правильно ли я понимаю: сначала мы дергаем провайдера в режиме checkid_immediate, и он подтверждает подлинность юзера если тот авторизован. Если же юзер не авторизован, то провайдер ничего не подтверждает и юзера надо его перекинуть на провайдера (ну и далее по стандартной схеме).
Да, примерно так. Ещё точнее, юзер должен быть не только авторизован у провайдера, но и уже один раз подтвердить, что про вход на этот сайт-консумер его спрашивать не надо.
Кстати, я немного запутался - чем отличается Claimed Identifier от Identifier?
Identifier — это то, что юзер ввёл в input (плюс нормализация). А claimed — это то, что сервер подтвердил в качестве OpenID пользователя. Они различаются, когда юзер вводит адрес всего сервера в качестве идентификатора.
-
Теперь вроде все ясно. Спасибо.
-
А случаем не наоборот ли, claimed (заявленный) тоесть тот что юзер ввел?
-
Вообще да, правда. Точнее, то, что он ввёл + нормализация. А слово "identifier" это просто общий термин для всех идентификаторах на всех этапах жизни.
-
Да, да. Вот как пример приведу в чем их отличие (как я понял из спецификации) на примере 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. Если я не прав, поправьте меня :) -
http://openid.yandex.ru/username/ Но сервер говорит, что у юзера идентификатор как https://username.ya.ru
Если речь конкретно про Яндекс, то так не должно быть в принципе. Есть два разных вида идентификатора (если у пользователя есть дневник на Я.ру), и они ничего общего друг с другом не имеют. Пользователь может пользоваться отдельно тем или другим.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.




