MyOpenID в ACS: добавление необходимых типов заявок

Этот вопрос является продолжением раздела Как передать требуемые претензии поставщику удостоверений OpenID с помощью Azure ACS?

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

Образцы Azure ACS показывают, что в ACS можно добавить произвольных поставщиков удостоверений OpenID. Но для того, чтобы ACS действительно помогала нам в нашем проекте как STS для различных популярных провайдеров, мы намеревались заставить ACS работать с MyOpenID.com (опять же, также используется в примерах). Проблема, как показывает хороший пример Витторио, заключается в том, что MyOpenID не будет выдавать нам такие претензии, как имя и адрес электронной почты, если не будет запрошено. Витторио и другие утверждают, что это связано с тем, что MyOpenID не поддерживает обмен атрибутами.

Хотя я не уверен в этом. Копаясь немного глубже в URL запроса, который генерирует ACS, я вижу, что параметры как openid.ns.ax=http://openid.net/srv/ax/1.0 а также openid.ax.required=email,fullname,firstname,lastname, Также, openid.ax.type.email набирается на axschema.org/contact/email тип. Вот где дела идут не так с MyOpenID. MyOpenID не понимает типы axschema.org и, следовательно, не возвращает значение электронной почты.

Что я знаю, так это то, что MyOpenID понимает schema.openid.net/contact/email тип. Поэтому, основываясь на этом, я вручную изменил URL-адрес запроса ACS, чтобы использовать схему openid.net вместо axschema. И вот, MyOpenID реагирует и показывает, что мой адрес электронной почты действительно будет возвращен.

Вот список параметров, которые я пытаюсь передать конечной точке myopenid.com/server:

К сожалению, когда ответ возвращается в ACS, он недостаточно хорош, и ACS дает сбой со следующими кодами ошибок:

Код ошибки HTTP: 400 Сообщение: ACS30000: Произошла ошибка при обработке ответа на вход OpenID. Внутреннее сообщение: ACS90014: отсутствует обязательное поле "openid.ax.value.email". Идентификатор трассировки: f8e09e6f-0765-4370-9f03-f744cce6fa2a Метка времени: 2011-08-02 17:12:57Z

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

Вопрос в том, выглядят ли параметры моего запроса именно вам или я что-то упускаю здесь?

ПРИМЕЧАНИЕ. Моя первоначальная настройка работает, если я оставляю запрос ACS без изменений и в ACS настраиваю только одно правило Passthrough для провайдера идентификации, я могу успешно аутентифицировать свой веб-сайт через ACS с использованием провайдера идентификации MyOpenID. Проблема остается, однако, что MyOpenID не будет передавать, например, FullName или Email в ACS, если запрос от ACS явно не запрашивает типы претензий http://schema.openid.net/namePerson или же http://schema.openid.net/contact/email

1 ответ

По соображениям безопасности ACS не может разрешить вызывающим абонентам повторно вводить адрес электронной почты. Фактически, то, что вы делаете по незнанию, - это вариант атаки 4.5 (путаница типов данных OpenID) из этой статьи. По соображениям безопасности ACS должен убедиться, что адрес электронной почты и другие поддерживаемые утверждения AX точно соответствуют типам, о которых он знает, в противном случае злоумышленники могут обмануть ACS и заменить одно утверждение другим. Дело не в том, что ACS не поддерживает AX, а в том, что ACS поддерживает только один тип претензии в качестве претензии электронной почты, и это не тот же самый, который использует MyOpenID. Короче говоря, это не сработает.

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