Пользовательское расширение MFA ADFS не работает с претензией электронной почты

Я создал расширение MFA для ADFS, используя это руководство: https://blogs.msdn.microsoft.com/jenfieldmsft/2014/03/24/build-your-own-external-authentication-provider-for-ad-fs-in-windows-server-2012-r2-walk-through-part-1/

Я пытаюсь получить входящее требование в IAuthenticationAdapter.BeginAuthentication(Claim claim, ...) иметь электронную почту пользователя, который проходит аутентификацию. Основываясь на руководстве, я должен быть в состоянии указать в моих метаданных IdentityClaims возвращать "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" и тогда я должен получить электронное письмо.

Тем не менее, мой код никогда не срабатывает.

Вместо этого я получаю следующую ошибку в журналах просмотра событий:

System.IO.InvalidDataException: The identity information provided does not contain a Windows account name.
   at Microsoft.IdentityServer.Web.Authentication.External.ExternalAuthenticationHandler.ProcessContext(ProtocolContext context, IAuthenticationContext authContext, IAccountStoreUserData userData)
   at Microsoft.IdentityServer.Web.Authentication.External.ExternalAuthenticationHandler.Process(ProtocolContext context)
   at Microsoft.IdentityServer.Web.Authentication.AuthenticationOptionsHandler.Process(ProtocolContext context)
   at Microsoft.IdentityServer.Web.PassiveProtocolListener.OnGetContext(WrappedHttpListenerContext context)

Я попытался указать доверительные отношения, чтобы доверяющая сторона передавала параметры LDAP, но я не могу получить доступ к ним в своем коде.

Какие-либо предложения?

0 ответов

Задний план

Мы столкнулись с этим вопросом, когда пытались отладить именно эту проблему. Мы экспериментировали сIAuthenticationAdapterMetadata.IdentityClaims. Когда наш адаптер запросилemailaddress как наше входное утверждение, ADFS выдало указанное выше исключение непосредственно перед вызовом BeginAuthentication.

Основная проблема заключалась в том, что наш поставщик утверждений (в данном случае Active Directory) не был настроен для предоставления адреса электронной почты пользователя. Мы обнаружили это с помощью (бесплатной) службы Microsoft Claims X-Ray, которую я настоятельно рекомендую тем, кто устраняет проблемы с претензиями ADFS.

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

Решение

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

  1. Перейдите к AD FS Management app на соответствующем компьютере.
  2. Выбрать Claims Provider Trusts.
  3. Щелкните правой кнопкой мыши поставщика, которого вы хотите "исправить", и выберите Edit Claimrules...
  4. Выбрать Add Rule... а затем выберите Send LDAP Attributes as Claims.
  5. Я предполагаю, что вам следует выбрать поставщика, над которым вы работаете, в качестве Attribute storeдля этого правила. Возможно, вам придется поэкспериментировать, если вы не можете.
  6. Сопоставить атрибут LDAP E-Mail-Addresses требовать тип E-Mail Address.
  7. Сохраните новое правило.

Дополнительное примечание: только первое значение вE-Mail-Addresses массив будет отправлен в BeginAuthentication. Это похоже на причуду интерфейса, а не на причуду этого решения.

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