Я нашел способ решения здесь: authentication-apache-httpd-Again-multiple-ldap-servers-with-expired-accounts
Я использовал для тестирования учетной записи пользователя из второй домен, у которого была отключена учетная запись одноименного имени в первом домене. Удаление отключенной учетной записи помогло, но удаление учетных записей в домене AD - плохая практика: вы можете получать объекты с неизвестными дескрипторами безопасности. Я создал фильтр LDAP для устранения отключенных пользователей, и теперь все работает нормально :)
/etc/apache2/apache2.conf:
<AuthnProviderAlias ldap first-ldap>
AuthLDAPURL "ldap://win2003server:389/DC=first,DC=domain?sAMAccountName?sub?(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))" NONE
AuthLDAPBindDN "cn=user1,cn=Users,dc=first,dc=domain"
AuthLDAPBindPassword "user1"
</AuthnProviderAlias>
<AuthnProviderAlias ldap second-ldap>
AuthLDAPURL "ldap://win2008server:3268/DC=second,DC=domain?sAMAccountName?sub?(&(objectCategory=person)(objectClass=user))" NONE
AuthLDAPBindDN "cn=user2,cn=Users,dc=second,dc=domain"
AuthLDAPBindPassword "user2"
</AuthnProviderAlias>
Обратите внимание, что этот фильтр работает для домена AD с функциональным уровнем "windows 2000 native", и не работает для домена AD с функциональным уровнем "windows server 2003", я не знаю почему.
Я не знаю, как заставить Apache делать то, что вы хотите. Однако вы можете настроить OpenLDAP в качестве прокси-сервера перед несколькими экземплярами AD, используя бэкенды ldap
или meta
, и это даст вам практически такое же поведение. Вы указываете Apache на свой прокси OpenLDAP, а затем OpenLDAP обращается к вашим серверам AD.
Здесь - моя запись об использовании meta
бэкэнда. Это скорее отправная точка, чем реальное решение.
Я использую OpenLDAP в качестве прокси прямо сейчас для аутентификации в трех разных каталогах - одном домене AD, одном удаленном сервере LDAP и локальном каталоге LDAP.