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:
- openid.ns = http://specs.openid.net/auth/2.0
- openid.mode = checkid_setup
- openid.claimed_id = http://specs.openid.net/auth/2.0/identifier_select
- openid.identity = http://specs.openid.net/auth/2.0/identifier_select
- openid.realm = https://myazurenamespace.accesscontrol.windows.net/v2/openid
- openid.return_to = https://myazurenamespace.accesscontrol.windows.net/v2/openid...
- openid.ns.ax = http://openid.net/srv/ax/1.0
- openid.ax.mode = fetch_request
- openid.ax.required = электронная почта, ПолноеИмя
- openid.ax.type.email = http://schema.openid.net/contact/email
- openid.ax.type.fullname = http://schema.openid.net/namePerson
К сожалению, когда ответ возвращается в 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. Короче говоря, это не сработает.