Я перепробовал все возможное с моими ограниченными знаниями, но я не могу понять, что не так, поэтому надеюсь, что кто-то может просто указать правильное направление.
У меня есть сервер ADFS 2016, который отлично работает с нашим внутренним AD, но я хотел настроить его с помощью AD LDS, поскольку я не хочу добавлять учетные записи для всех наших клиентов на нашем внутреннем сервере AD.
Я установил AD LDS на том же компьютере, где размещается ADFS (позже уберу его, но просто хочу, чтобы он работал), и следил за статьей, Microsoft. Некоторые изменения в этой настройке заключаются в том, что я использую только атрибуты UPN и Email, а не First, surname или givenName.
Кажется, когда я использую все команды PowerShell из статьи, я получаю доверие локального поставщика утверждений, но когда я пытаюсь войти в систему, он всегда терпит неудачу с сообщениями об ошибках в журнале событий, предполагающими, что объект не существует.
Учетная запись пользователя определенно существует, но я не уверен, что не так. Приложение отправляет только имя пользователя и пароль, поэтому я определил сопоставление с UPN, которое совпадает с электронной почтой пользователя, а также попытался использовать атрибут mail.
Какую дополнительную информацию я могу предоставить, чтобы кто-то мог направлять меня? Спасибо
РЕДАКТИРОВАТЬ
Я включил отладку трассировки для adfs и вижу следующие ошибки:
LDAPAttributeStoreReader: Failed to retrieve attributes with filter (&(objectClass=inetOrgPerson)(mail=user@domain.com)) with error:
System.DirectoryServices.Protocols.DirectoryOperationException: The object does not exist.
Server stack trace:
at System.DirectoryServices.Protocols.LdapConnection.ConstructResponse(Int32 messageId, LdapOperation operation, ResultAll resultType, TimeSpan requestTimeOut, Boolean exceptionOnTimeOut)
at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink)
Exception rethrown at [0]:
at System.DirectoryServices.Protocols.LdapConnection.EndSendRequest(IAsyncResult asyncResult)
at Microsoft.IdentityServer.ClaimsPolicy.Engine.AttributeStore.Ldap.LdapAttributeStoreReader.OnAttributeSearchComplete(IAsyncResult attributeSearchAsyncResult)
Кроме того, некоторые другие ошибки, которые я вижу
Failed to complete attribute store query with error:
The object does not exist.
Error code: NoSuchObject
Server response message: 0000208D: NameErr: DSID-0315295A, problem 2001 (NO_OBJECT), data 0, best match of:
'DC=domain,DC=com'
at Microsoft.IdentityModel.Threading.AsyncResult.End(IAsyncResult result)
at Microsoft.IdentityServer.ClaimsPolicy.Engine.AttributeStore.Ldap.LdapAttributeStoreReader.EndGetAttributes(IAsyncResult result)
at Microsoft.IdentityServer.ClaimsPolicy.Engine.AttributeStore.Ldap.LdapAttributeStore.OnExecuteQueryComplete(IAsyncResult ar)
И третий
LdapAccountStore: Failed to lookup the directory object for user user@domain.com on server.
Exception: The object does not exist.
Error code: NoSuchObject
Server response message: 0000208D: NameErr: DSID-0315295A, problem 2001 (NO_OBJECT), data 0, best match of:
'DC=domain,DC=com'
StackTrace: at Microsoft.IdentityModel.Threading.AsyncResult.End(IAsyncResult result)
at Microsoft.IdentityModel.Threading.TypedAsyncResult`1.End(IAsyncResult result)
at Microsoft.IdentityServer.Service.LocalAccountStores.LdapStore.LdapAccountStore.GetUserDn(String userName)
System.DirectoryServices.Protocols.DirectoryOperationException: The object does not exist.
ResultCode: NoSuchObject
ErrorMessage: 0000208D: NameErr: DSID-0315295A, problem 2001 (NO_OBJECT), data 0, best match of:
'DC=domain,DC=com'
MatchedDN: DC=domain,DC=com
StackTrace:
Server stack trace:
at System.DirectoryServices.Protocols.LdapConnection.ConstructResponse(Int32 messageId, LdapOperation operation, ResultAll resultType, TimeSpan requestTimeOut, Boolean exceptionOnTimeOut)
at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink)
Exception rethrown at [0]:
at System.DirectoryServices.Protocols.LdapConnection.EndSendRequest(IAsyncResult asyncResult)
at Microsoft.IdentityServer.ClaimsPolicy.Engine.AttributeStore.Ldap.LdapAttributeStoreReader.OnAttributeSearchComplete(IAsyncResult attributeSearchAsyncResult)
Итак, наконец, после многих проб и ошибок я нашел решение своей проблемы. Это применимо в основном, если вы настраиваете ADFS 4 с аутентификацией AD LDS и, вероятно, следовали этому Статья Microsoft.
Некоторым это могло показаться очевидным, но я боролся с этим. Когда вы читаете эту статью, в ней не упоминается, что учетная запись, которую вы используете для привязки к экземпляру AD LDS, должна быть членом группы администраторов. Теперь, когда я понял, что это как-то связано с разрешениями, я попытался добавить учетную запись в группу администраторов в разделе конфигурации, и это явно не сработало. Итак, найдите группу администраторов в созданном вами разделе приложения и сделайте учетную запись ее членом, используя DN.
Еще одна вещь, которую я хочу упомянуть, это Претензии инструмент от Microsoft, который помог мне решить некоторые другие проблемы. Спасибо