Я использую Apache 2, и мне нужно аутентифицировать пользователей из нескольких доменов AD в одном <Location/>
. Я пробовал использовать mod_authn_alias
ОС: Debian GNU / Linux Squueze с последними обновлениями
Apache / 2.2.16
Модули
/etc/apache2/apache.conf:
<AuthnProviderAlias ldap first-ldap>
AuthLDAPURL "ldap://win2003server:389/DC=first,DC=domain?sAMAccountName?sub?(objectClass=*)" 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?(objectClass=*)" NONE
AuthLDAPBindDN "cn=user2,cn=Users,dc=second,dc=domain"
AuthLDAPBindPassword "user2"
</AuthnProviderAlias>
/ etc / apache2 / sites-enabled / 000default:
<Location /test>
Order allow,deny
Allow from all
Authtype Basic
AuthBasicProvider first-ldap second-ldap
AuthName "TEST"
AuthzLDAPAuthoritative off
require valid-user
</Location>
В этой конфигурации он аутентифицирует пользователей из первого домена, а для пользователей из второго домена выдает ошибку:
[Fri Sep 16 20:54:39 2011] [info] [client 10.0.0.62] [25672] auth_ldap authenticate: user2 user2 authentication failed; URI /test/ [ldap_simple_bind_s() to check user2 credentials failed][Invalid credentials]
Когда я ухожу только AuthBasicProvider second-ldap
пользователи из второго домена могут успешно пройти аутентификацию, поэтому LDAP второго домена в порядке.
Кто-нибудь знает решение, чтобы заставить работать mod_authn_alias?
Я не знаю, как заставить Apache делать то, что вы хотите. Однако вы можете настроить OpenLDAP в качестве прокси перед несколькими экземплярами AD, используя либо ldap
или meta
backends, и это даст вам такое же поведение. Вы указываете Apache на прокси-сервере OpenLDAP, а затем OpenLDAP обращается к вашим серверам AD.
Вот моя рецензия на использование meta
бэкэнд. Это скорее отправная точка, чем реальное решение.
На самом деле я использую OpenLDAP в качестве прокси прямо сейчас для аутентификации в трех отдельных каталогах - одном домене AD, одном удаленном сервере LDAP и локальном каталоге LDAP.
Я нашел способ решения здесь: аутентификация-apache-httpd-против-нескольких-ldap-серверов-учетных записей с истекшим сроком действия
Я использовал для тестирования учетную запись пользователя из второго домена, у которого была отключена учетная запись тезки в первом домене. Удаление отключенной учетной записи помогло, но удаление учетных записей в домене 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», я не знаю почему.