Пользовательское расширение 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
. После того, как мы решили основную проблему, не было ограничений на адрес электронной почты пользователя, если он был определен.
Решение
Примечание. Если у вас несколько трастов поставщика утверждений, вам может потребоваться сделать это с каждым из них.
- Перейдите к
AD FS Management
app на соответствующем компьютере. - Выбрать
Claims Provider Trusts
. - Щелкните правой кнопкой мыши поставщика, которого вы хотите "исправить", и выберите
Edit Claimrules...
- Выбрать
Add Rule...
а затем выберитеSend LDAP Attributes as Claims
. - Я предполагаю, что вам следует выбрать поставщика, над которым вы работаете, в качестве
Attribute store
для этого правила. Возможно, вам придется поэкспериментировать, если вы не можете. - Сопоставить атрибут LDAP
E-Mail-Addresses
требовать типE-Mail Address
. - Сохраните новое правило.
Дополнительное примечание: только первое значение вE-Mail-Addresses
массив будет отправлен в BeginAuthentication
. Это похоже на причуду интерфейса, а не на причуду этого решения.