Можно ли иметь более одного фильтра поиска в AuthLDAPURL?
Пример фильтра uid:
<Location /test/>
AuthType Basic
AuthName "Test"
AuthBasicProvider ldap
AuthUserFile /dev/null
AuthLDAPURL ldap://example.test.com/o=test,c=com?uid
AuthLDAPBindDN "******"
AuthLDAPBindPassword ******
require ldap-group cn=group01,o=test,c=com
</Location>
Нам нужно искать по uid или почте. Подобно...
AuthLDAPURL ldap://example.test.com/o=test,c=com?uid|mail
Решение (меня устраивает):
Протестировано с Apache 2.4 http://httpd.apache.org/docs/current/mod/mod_authn_core.html
<AuthnProviderAlias ldap ldap-uid>
AuthLDAPBindDN "******"
AuthLDAPBindPassword ******
AuthLDAPURL "ldap://example.test.com/o=test,c=com?uid??(&(isMemberOf=cn=group01,o=test,c=com))"
</AuthnProviderAlias>
<AuthnProviderAlias ldap ldap-mail>
AuthLDAPBindDN "******"
AuthLDAPBindPassword ******
AuthLDAPURL "ldap://example.test.com/o=test,c=com?mail??(&(isMemberOf=cn=group01,o=test,c=com))"
</AuthnProviderAlias>
<Location "/test/">
Order deny,allow
Allow from all
AuthType Basic
AuthName "Login with mail or uid"
AuthBasicProvider ldap-uid ldap-mail
LDAPReferrals Off
Require valid-user
</Location>
Thx Tonin!
Я думаю, вы хотите найти атрибут uid
или mail
(не фильтруя по тем). Невозможно сразу использовать 2 разных атрибута в URL-адресе LDAP, хотя RFC 2255 позволяет это.
Apache документация mod_authnz_ldap утверждает, что URL-адрес должен быть таким: ldap://host:port/basedn?attribute?scope?filter
с участием
Однако добавив еще один модуль apache, а именно mod_authn_alias, вы можете использовать 2 разных LDAPURL в качестве разных поставщиков аутентификации. Чтобы это работало, вы можете добавить новый файл (который будет находиться в корне вашей конфигурации apache), содержащий:
# Different LDAP attributes to be used as login
<AuthnProviderAlias ldap ldap-uid>
AuthLDAPURL ldap://example.test.com/o=test,c=com?uid
AuthLDAPBindDN "******"
AuthLDAPBindPassword ******
</AuthnProviderAlias>
<AuthnProviderAlias ldap ldap-mail>
AuthLDAPURL ldap://example.test.com/o=test,c=com?mail
AuthLDAPBindDN "******"
AuthLDAPBindPassword ******
</AuthnProviderAlias>
Затем в вашем <Location>
заявление, вы используете следующую конфигурацию:
<Location /test/>
AuthType Basic
AuthName "Test"
AuthBasicProvider ldap-uid ldap-mail
AuthUserFile /dev/null
require ldap-group cn=group01,o=test,c=com
</Location>
Сначала будет предпринята попытка аутентификации с помощью uid
и если это не удается, попробуйте использовать mail
атрибут. С помощью этого типа конфигурации вы можете добавить столько разных поставщиков LDAPURL, сколько захотите.
Однако вы должны быть осторожны с одной вещью: поиск LDAP должен вернуть одно значение, иначе вы не будете уверены, какая из нескольких записей будет использоваться для проверки пароля. Для этого вы можете использовать прицел (one
вместо того sub
) или поисковый фильтр, ограничивающий количество возвращаемых записей.
Дополнительный файл должен быть добавлен в вашу конфигурацию apache за пределами <Location>
или любой <VirtualHost>
директивы. Он должен быть включен на корневом уровне вашей конфигурации apache. И authn_alias
модуль, конечно, нужно активировать.