openid.claimed_id является статическим? - PullRequest
10 голосов
/ 12 января 2010

Я читаю о Федеративном входе в систему для пользователей учетной записи Google , чтобы выяснить, как можно заставить пользователя войти в веб-приложение, используя его учетную запись Google.

Таким образом, к концу процесса Google возвращает предоставленный Google идентификатор, который добавляется как openid.claimed_id. Это означает, что веб-приложение использует этот идентификатор для распознавания пользователя и предоставления доступа к функциям и данным приложения. У меня вопрос, является ли этот идентификатор статическим? Могу ли я использовать этот идентификатор для повторной идентификации одного и того же пользователя?

Ответы [ 3 ]

11 голосов
/ 13 января 2010

Да. Считайте, что значением openid.claimed_id является имя пользователя. Особенно с Google, но это верно для любого провайдера OpenID, который действительно реализует «направленную идентификацию», не считайте это имя пользователя сопоставимым с другими веб-сайтами. Любая другая проверяющая сторона, кроме вашего собственного веб-сайта, по своему замыслу получит другое значение требуемый_идентификатора для того же пользователя Google.

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

7 голосов
/ 21 января 2010

Конкретный ответ на ваш вопрос находится в Документация Googles OpenID API :

Идентификатор, предоставленный Google, который не связан с действительным именем или паролем учетной записи Google пользователя, является постоянным значением; оно остается постоянным, даже если пользователь меняет свое имя пользователя Google и / или адрес электронной почты. Этот идентификатор также является «направленной идентификацией», то есть Google возвращает разные значения каждой проверяющей стороне. Google использует параметр запроса openid.realm для распознавания проверяющей стороны, поэтому, если стороннее приложение решит изменить это значение, все идентификаторы пользователя будут изменены.

1 голос
/ 10 сентября 2013

На самом деле, я только что натолкнулся на случай, когда изменился goog_id_id для моего тестового пользователя. Я подходил к завершению внедрения OpenID в мое приложение, и ни с того ни с сего заявленный идентификатор_оценки в данных ответа изменился.

Я тестировал эту учетную запись в течение последних нескольких недель, и требуемый_идентификатор был все время таким же, как и ожидалось. Тогда блин, изменился! Я много раз просматривал данные ответов, чтобы проверить, и основной код для извлечения данных не изменился.

Я не уверен, как справиться с этим в данный момент, но я думаю, что это бросит меня в тупик. После первоначальной аутентификации пользователи регистрируются на сайте (как и следовало ожидать) и настраивают отображаемое имя. Как мы можем убедиться, что это тот же пользователь, если требуемый_ид изменился? Мы, конечно, не можем использовать адрес электронной почты в соответствии с лучшими практиками.

EDIT

Теперь у меня пирог на лице! Я пропустил одну маленькую деталь, которая оказалась главной. Я изменил свою среду разработки и размещал на другом v-хосте. Это эффективно изменит область, и это изменит ответ требуемого_идида в соответствии с документами.

Это был хороший урок для меня, так как я собирался реализовать OID на поддомене, в котором область автоматически устанавливалась в моем коде. Теперь я избавил себя от головной боли, потому что я не смог бы использовать одну и ту же базу данных пользователей во всех других поддоменах, не нарушая идентичность.

обновление области

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

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

например, openid.realm = http://*.yourdomain.com

Это позволит вам расширить страницу входа на все ваши субдомены и сохранить идентичность пользователей в них.

(необязательно) Область с проверкой подлинности. Определяет домен, который конец пользователя просят доверять. (Пример: "http://*.myexamplesite.com") Это значение должно соответствовать домену, определенному в openid.return_to. Если этот параметр не определен, Google будет использовать URL-адрес, указанный в openid.return_to.

...