Другие поисковые фильтры в AuthLDAPURL
Возможно ли иметь более одного поискового фильтра в 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>
Спасибо Тонин!
1 ответ
Я думаю, вы хотите найти атрибут uid
или же mail
(не фильтруя по тем). Невозможно сразу использовать два разных атрибута в URL-адресе LDAP, хотя RFC 2255 допускает это.
один mod_authnz_ldap: невозможно
Документация Apache mod_authnz_ldap гласит, что URL должен быть таким: ldap://host:port/basedn?attribute?scope?filter
с
- Атрибут: атрибут для поиска. Хотя RFC 2255 допускает разделенный запятыми список атрибутов, будет использоваться только первый атрибут, независимо от того, сколько их предоставлено. Если атрибуты не предоставлены, по умолчанию используется uid. Рекомендуется выбрать атрибут, который будет уникальным для всех записей в поддереве, которое вы будете использовать.
- фильтр: действительный фильтр поиска LDAP. Если не указан, по умолчанию (objectClass=*), который будет искать все объекты в дереве. Фильтры ограничены примерно 8000 символами (определение MAX_STRING_LEN в исходном коде Apache). Это должно быть более чем достаточно для любого приложения.
Использование 2 провайдеров с mod_authn_alias
Однако, добавив еще один модуль apache, а именно mod_authn_alias, вы можете использовать 2 разных LDAP URL в качестве разных провайдеров аутентификации. Чтобы это работало, вы можете добавить новый файл (который будет включен в корень вашей конфигурации 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
приписывать. С помощью этого типа конфигурации вы можете добавить столько разных провайдеров LDAP URL, сколько пожелаете.
Вы должны быть осторожны с одной вещью, хотя поиск LDAP должен возвращать одно значение, иначе вы не будете уверены, какая из нескольких записей будет использоваться для проверки пароля. Для этого вы можете использовать область видимости (one
вместо sub
) или поисковый фильтр, который ограничит количество возвращаемых записей.
Дополнительный файл должен быть добавлен в вашу конфигурацию apache вне <Location>
или любой <VirtualHost>
директивы. Он должен быть включен на корневом уровне вашей конфигурации apache. И authn_alias
модуль должен быть активирован, конечно.