OpenID: уникальный идентификатор URL? какие различия между идентификаторами

В спецификациях OpenID говорится:

  • Идентификатор:

Идентификатор - это просто URL. Весь поток протокола аутентификации OpenID посвящен доказательству того, что конечный пользователь является владельцем URL-адреса.

  • Заявленный идентификатор:

Идентификатор, который, по словам Конечного пользователя, принадлежит им, хотя он еще не был проверен Потребителем.

  • Проверенный идентификатор:

Идентификатор, который Конечный пользователь доказал потребителю, которым он владеет.

  • Поставщик удостоверений:

Также называется "IdP" или "Сервер". Это сервер аутентификации OpenID, к которому потребитель обращается за криптографическим подтверждением того, что конечный пользователь владеет заявленным идентификатором. То, как Конечный пользователь аутентифицируется у своего Поставщика удостоверений, выходит за рамки OpenID Authenticaiton.

  • Является ли URL идентификатора уникальным? Что именно это?

  • Если это не уникально, есть ли что-то уникальное, чтобы потребитель мог отличаться между разными пользователями по одному и тому же URL конечной точки OpenID?

  • В чем разница между IdP и идентификатором URL?

В других местах я прочитал термин "URL-адрес конечной точки OpenID".

  • URL конечной точки OpenID совпадает с IdP? То есть IdP - это тоже URL?

Давайте возьмем Googles OpenID в качестве примера. Когда какой-то сайт запрашивает у меня OpenID логин, я использую OpenID URL https://www.google.com/accounts/o8/id, Это идентификатор URL? Если так, то это явно не уникально. Часто, когда я возвращаюсь в настройках своей учетной записи на этом сайте для входа в OpenID, он не показывает введенный URL, но расширяет его как-то так: https://www.google.com/accounts/o8/id?id=AltOawk..., Этот URL сейчас кажется уникальным.

  • Какова теперь цель https://www.google.com/accounts/o8/id? Это URL конечной точки OpenID? Или это URL IdP (если это что-то другое)?

  • И какова цель https://www.google.com/accounts/o8/id?id=AltOawk...? Это действительно уникально и всегда одинаково для моей учетной записи Google? Так что URL это то, что идентифицирует меня?

  • Почему они не использовали https://www.google.com/accounts/o8/id?u={google-username} вместо этого загадочного ...?id=AltOawk...?

  • Какой идентификатор URL в случае Google?

  • Что такое URL конечной точки OpenID? (Что такое URL IdP?)

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

  • Является ли URL-адрес конечной точки OpenID идентичным URL-адресу идентификатора?

В моей реализации конечной точки OpenID у меня есть именно та проблема, что она не может отличаться между разными пользователями. На потребительском веб-сайте все пользователи в этой конечной точке OpenID одинаковы. Конечно, это всегда один и тот же OpenID URL, но это также относится и к Googles OpenID.

  • Если конечный пользователь использует этот "общий" URL, как я могу перенаправить / переслать его в моей реализации конечной точки OpenID на "конкретный" / уникальный (идентификатор?) URL? Или как я могу различить разных конечных пользователей по одному и тому же URL OpenID?

В моей текущей реализации, когда я включаю некоторую трассировку отладки, первый запрос, который я получаю, это режим checkid_setup. В спецификациях говорится, что я получаю заявленный идентификатор здесь. Из-за того, что я ввел на потребительском сайте (и моя трассировка отладки говорит то же самое), это "общий" URL (URL конечной точки OpenID). Т.е. это не уникальный URL.

  • Должен ли я сделать перенаправление в этот момент сейчас? Спецификации ничего не говорят об этом. Где мне указать "конкретный" URL? (В моем случае это URL http://{endpoint-url}?u={endpoint-username}.)

Существуют также термины "сервер OpenID" (URL) и "делегат OpenID" (URL).

  • Как эти термины связаны с другими терминами выше? Все так же, как URL конечной точки OpenID?

  • Что такое "идентификатор OpenID"? Так же, как URL идентификатора OpenID?


См. Также связанный вопрос: Чем отличается OpenID между разными именами входа на одной и той же конечной точке OpenID?

(Мета вопрос: Должен ли я разделить это на множество независимых SO вопросов? Боюсь, что иначе я не смогу получить ответы на все мои вопросы.)

3 ответа

Хорошо, поскольку я только что исправил свою реализацию конечной точки SMID OpenID (подробности о некоторых очень похожих проблемах, которые у меня были здесь), где я сделал несколько предположений об этих отношениях. Конечно, это не доказывает их правоту (поэтому, пожалуйста, поправьте меня). Вот они:

  • URL идентификатора = URL конечной точки OpenID = IdP

  • Конечная точка OpenID не является уникальной. Это то же самое для всех конечных пользователей этой конечной точки.

  • Подтвержденный идентификатор URL = личность

  • Проверенный идентификатор URL уникален. Он связан с учетной записью пользователя конечной точки.

  • https://www.google.com/accounts/o8/id URL-адрес конечной точки Google OpenID.

  • https://www.google.com/accounts/o8/id?id=AltOawk... URL-адрес идентифицированного идентификатора Google OpenID.

  • Хэш, который содержит идентификационный URL-адрес Google OpenID, также связан с областью OpenID (пространство имен потребительского домена, в котором этот идентификатор OpenID остается действительным). Это одна из причин, чтобы не просто имя пользователя.

  • О том, как предоставить уникальный проверенный идентификатор URL, см. Здесь.

Тем не менее, некоторые вещи остаются неясными для меня:

  • Какие еще причины используются Google для хешированного идентификатора? он мог бы также использовать id?u={username}&oidrealm={...},

  • Какова причина, чтобы вообще иметь такую ​​область OpenID?

  • В чем разница между идентификатором URL и заявленным идентификатором URL?

Вот мое понимание. Я на самом деле просто отвечаю на два последних вопроса в вашем собственном ответе. Надеюсь, кто-то найдет это полезным.

Какова причина, чтобы вообще иметь такую ​​область OpenID?

Царство используется для безопасности. По сути, return_url проверяется на соответствие области, и спецификации OpenID говорят, что они ДОЛЖНЫ совпадать. Google сделал еще один шаг вперед и предоставляет уникальные проверенные идентификаторы для каждой области. Возможно, они сделали, как вы предложили, и вернули область в свой идентификатор, но тогда вы могли бы определить, посмотрев на два проверенных идентификатора, были ли они одним и тем же конечным пользователем или нет. Я думаю, что они пытаются освободить свои идентификаторы от идентифицирующей информации. (иронично, нет?)

В чем разница между идентификатором URL и заявленным идентификатором URL?

Заявленный идентификатор - это тот, который указал конечный пользователь. Это не их уникальный идентификатор. Yahoo является хорошим примером этого. Они позволяют вам указать yahoo.com в качестве идентификатора войдите в свою учетную запись Yahoo и верните уникальный идентификатор потребителю openid. Это просто упрощает процесс для конечного пользователя. (И увеличивает вероятность того, что они будут использовать yahoo.com как их опенид!)

И какова цель https://www.google.com/accounts/o8/id?id=AltOawk...? Это действительно уникально и всегда одинаково для моей учетной записи Google? Так что URL это то, что идентифицирует меня?

Если я все правильно понял, ответ "Да, это так!"

Почему они не использовали https://www.google.com/accounts/o8/id?u={google-username} вместо этого загадочного...? Id = AltOawk...?

Я предполагаю, что они хотят быть в безопасности для будущих изменений в вашей учетной записи, если вы, например (сейчас или в будущем) сможете изменить свое имя пользователя, то вы, вероятно, хотели бы, чтобы это было отражено в вашем идентификаторе-заявке OpenId как хорошо - но тогда у тебя будут проблемы! все ваши регистрации для вашего старого заявленного идентификатора не будут оценены. Подробнее читайте здесь: http://wiki.openid.net/w/page/12995200/OpenID-Security-Best-Practices и здесь: http://blog.nerdbank.net/2008/07/case-for-case-sensitive-openid-url.html

Другие вопросы по тегам