Другие поисковые фильтры в 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 модуль должен быть активирован, конечно.

Другие вопросы по тегам