Получить адрес электронной почты из SAML Response с помощью единого входа и ADFS - PullRequest
2 голосов
/ 23 февраля 2012

Я нахожусь в процессе настройки системы единого входа (SSO) с использованием ADFS и SAML 2.0.Я должен придерживаться следующего сценария, на котором я застрял:

1) Пользователь пытается получить доступ к веб-ресурсу, не вошел в систему, поэтому направлен на службу единого входа ADFS.

2) Пользователь успешно проходит проверку подлинности противADFS.

3) ADFS передает ответ SAML обратно на веб-ресурс.

4) Сам веб-ресурс имеет базу данных пользователей, но пользователь здесь не существует.

5) Итак, веб-ресурс должен создать учетную запись пользователя без уведомления.Для этого мне нужен адрес электронной почты.

Итак, можно ли настроить ADFS для возврата адреса электронной почты пользователя в успешном ответном сообщении SAML?

1 Ответ

3 голосов
/ 23 февраля 2012

Вы можете настроить ADFS для возврата заявки по электронной почте, при условии, что ADFS имеет какой-то способ ее получения (Active Directory или другое хранилище атрибутов, может быть, база данных, к которой он может получить доступ?), И если ваше приложение настроено на дешифрование возвращенного токена прочитать претензии внутри.

Предполагается, что это ADFS 2.0:

  1. Настройте свой веб-ресурс как Доверие проверяющей стороны (похоже, что вы сделали это)
  2. Щелкните правой кнопкой мыши RP и выберите Изменить правила заявки ...
  3. На вкладке Правила преобразования выдачи добавьте новое правило для адреса электронной почты

Если вы можете получать электронную почту из Active Directory, поскольку ваши пользователи проходят аутентификацию через домен, вы можете выбрать шаблон правила «Отправлять атрибуты LDAP в качестве утверждений».

В противном случае вам нужно будет выбрать «Отправить заявки с использованием настраиваемого правила» и настроить хранилище настраиваемых атрибутов (для базы данных или чего бы то ни было) и выполнить действия по написанию правила заявки для этого.

После того, как вы настроите это, в вашем приложении ASP.NET вам нужно будет настроить его для использования ADFS в качестве эмитента токена. Это достигается с помощью Windows Identity Framework Microsoft.IdentityModel.dll и соответствующей конфигурации. Если вы установили WIF SDK , у вас должны быть некоторые дополнительные параметры в Visual Studio, а именно, если вы щелкните правой кнопкой мыши свой веб-проект, должна быть опция «Добавить ссылку на STS». Это запустит FedUtil, который является мастером, который автоматически настроит ваш web.config соответствующим образом. Google вокруг для того, чтобы настроить вещи.

Теперь, когда ваш сайт использует ADFS для заявок, вам нужно внести несколько изменений. В разделе <microsoft.identityModel> вашего web.config убедитесь, что вы установили его для сохранения токена начальной загрузки (<service saveBootstrapTokens="true">). Теперь в своем коде вы можете получить доступ к претензии по электронной почте в любое время, выполнив:

string email = (User.Identity as IClaimsIdentity).Claims.Where(c => c.ClaimType == ClaimTypes.Email).FirstOrDefault().Value;

Если вы не установите его для сохранения токена начальной загрузки, то коллекция заявок там будет пустой.

Существует потенциально много других факторов, которые могут все испортить на этом пути. Надеюсь, это поможет вам на правильном пути.

...