OpenID: уникальный идентификатор URL? какие различия между идентификаторами - PullRequest
15 голосов
/ 16 июля 2010

В спецификациях 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 ]

5 голосов
/ 16 июля 2010

Хорошо, поскольку я только что исправил свою реализацию конечной точки SMF 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?

2 голосов
/ 19 мая 2011

И какова цель 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

2 голосов
/ 01 сентября 2010

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

Почему вообще существует такая сфера OpenID?

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

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

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

...