Я пытался привязать apache на сервере Windows к нашему серверу Active Directory для аутентификации и авторизации.
Чтобы проверить это, я пробовал обработчик "ldap-status" со следующими параметрами
<Location "/ldap-status">
SetHandler ldap-status
AuthType Basic
AuthBasicProvider ldap
AuthName "LDAP Status"
LDAPReferrals off
AuthLDAPBindAuthoritative on
AuthLDAPURL "ldap://1.2.3.4:389/cn=Users,dc=XXX,dc=example,dc=com?sAMAccountName?sub?(objectClass=person)" NONE
AuthLDAPGroupAttribute member
AuthLDAPGroupAttributeIsDN on
AuthLDAPMaxSubGroupDepth 0
AuthLDAPBindDN xxx
AuthLDAPBindPassword xxx
Require ldap-group "cn=TEST GROUP,cn=Users,dc=XXX,dc=example,dc=com"
</Location>
До этого момента, если я удалю Require ldap-group
и замените его на Require valid-user
, он работает правильно, но не если я восстановлю групповое требование.
Судя по тому, что я вижу на сервере AD с помощью PowerShell, группа существует, и у нее есть member
атрибут, в котором перечислены DN всех участников; на основании этого я установил AuthLDAPGroupAttribute
к member
и AuthLDAPGroupAttributeIsDN
к on
.
Я уверен, что мой пользователь находится в группе, для которой мне нужна проверка, однако в журнале ошибок apache есть только эта запись, которая на самом деле не помогает понять причину:
[Пн, 27 апреля, 14: 52: 08.023952 2020] [authz_core: error] [pid 13168: tid 2072] [client 10.0.1.45:59690] AH01631: пользователь mtassinari: ошибка авторизации для «/ ldap-status»:
Что я могу сделать, чтобы исправить конфигурацию, чтобы понять, почему "require ldap-group" не работает?
В конце концов, я смог заставить его работать, разделив аутентификацию и авторизацию с помощью псевдонима, например:
<AuthnProviderAlias ldap my-ldap>
AuthLDAPBindAuthoritative on
AuthLDAPURL "ldap://1.2.1.4:389/cn=Users,dc=XXX,dc=example,dc=com?sAMAccountName?sub?(objectClass=person)" NONE
AuthLDAPBindDN xxx
AuthLDAPBindPassword xxx
</AuthnProviderAlias>
<AuthzProviderAlias ldap-group ldap-group-test "cn=TEST GROUP,cn=Users,dc=XXX,dc=example,dc=com">
AuthLDAPURL "ldap://1.2.1.4:389/cn=Users,dc=XXX,dc=example,dc=com" NONE
AuthLDAPBindDN xxx
AuthLDAPBindPassword xxx
AuthLDAPGroupAttribute member
AuthLDAPGroupAttributeIsDN on
AuthLDAPMaxSubGroupDepth 0
</AuthzProviderAlias>
<Location "/ldap-status">
SetHandler ldap-status
LDAPReferrals off
AuthType Basic
AuthName "LDAP Status"
AuthBasicProvider my-ldap
Require ldap-group-test
</Location>
я считать ключевое отличие здесь - AuthLDAPURL
, который в провайдере авторизации не имеет никакого фильтра, просто не кажется правильным повторять общие параметры конфигурации, чтобы заставить его работать.