Получите адрес электронной почты из ответа SAML с помощью системы единого входа и ADFS

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

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

2) Пользователь успешно аутентифицируется в ADFS.

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

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

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

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


person rf_wilson    schedule 23.02.2012    source источник
comment
Я должен добавить к этому, что пользователи входят в систему, используя адрес электронной почты в качестве имени пользователя.   -  person rf_wilson    schedule 23.02.2012


Ответы (1)


Вы можете настроить 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 соответствующим образом. Погуглите, как все устроить.

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

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

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

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

person Sean Hanley    schedule 23.02.2012
comment
Поскольку вы сказали, что они входят в систему, используя свою электронную почту, я предполагаю, что они не являются членами домена. В этом случае все, что ADFS использует для поиска их комбинации электронной почты / пароля или что-то еще, вероятно, является тем же хранилищем атрибутов, к которому вам понадобится доступ, чтобы заполнить указанное значение заявки. - person Sean Hanley; 23.02.2012
comment
Мой веб-ресурс - это веб-сайт ASP.net 4.0. Насколько я понимаю, сторона ADFS уже настроена и ранее использовалась для реализации Java. Только сейчас его нужно конвертировать в .net 4.0. К сожалению, похоже, никто не знает, как работает система Java, но я думаю, что должен предположить, что та же проблема уже встречалась раньше. - person rf_wilson; 24.02.2012
comment
Смотрите мои правки. Я добавил некоторые сведения о том, как получить доступ к заявке по электронной почте с веб-сайта ASP.NET. Поскольку похоже, что ваша среда в основном уже настроена, вы можете игнорировать эти части, но я все равно вставлю их на случай, если кто-то еще наткнется на этот ответ. - person Sean Hanley; 24.02.2012