Как и когда следует использовать перенаправленные идентификаторы OpenID?

В настоящее время я использую аутентификацию OpenID для веб-сайта. Во время тестирования я заметил, что Google принимает разные версии заявленных идентификаторов профиля Google, например:

Интересно, что подтвержденный идентификатор отличается от хорошо (для примеров выше в том же порядке):

Конечно, это затрудняет поиск связанной учетной записи пользователя, если не сказать невозможным. Интересно, что все вышеперечисленные идентификаторы работают для Stackoverflow. Поэтому я подумал, что должен быть какой-то этап нормализации, который мне не хватает в моей реализации - или SO делает какое-то специализированное колдовство, чтобы все прояснить.

Глядя на 7.2 Нормализация спецификации OpenID Authentication Я обнаружил this:

Идентификаторы URL ДОЛЖНЫ быть затем нормализованы как с помощью следующих перенаправлений при извлечении их контента, так и, наконец, с применением правил из Раздела 6 [RFC3986] к конечному URL назначения. Этот конечный URL ДОЛЖЕН быть отмечен Проверяющей стороной как Заявленный идентификатор и использоваться при запросе аутентификации.

Следующие перенаправления заявленных идентификаторов не очень помогают, поскольку у меня все еще остаются два разных идентификатора:

Просмотр перенаправлений проверенных идентификаторов гораздо полезнее, поскольку я всегда получаю следующее:

Ладно, похоже, я должен следовать перенаправлениям проверенных идентификаторов, а не заявленных идентификаторов.

Теперь вопрос: безопасно ли следовать перенаправлениям заявленных / проверенные идентификаторы, например перед поиском в БД следующим образом:

do {
  user = lookup(verifiedId)
  if (user is null)
    response = fetchUrl(verifiedId)
    if (response.location is null) {
      break # no redirect, jump out of loop, unknown user
    } else {
      verifiedId = response.location # use redirect location
    }
} while (user is null)

return user;

Если да, я подозреваю, что это следует делать не только при поиске пользователя, но и при сохранении нового идентификатора, верно?

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

11
задан rene 22 February 2014 в 23:02
поделиться