Назад | Перейти на главную страницу

Аутентификация Apache из нескольких доменов в AD с помощью mod_authn_alias

Я использую 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», я не знаю почему.