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

Другие фильтры поиска в 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>

Thx Tonin!

Я думаю, вы хотите найти атрибут uid или mail (не фильтруя по тем). Невозможно сразу использовать 2 разных атрибута в 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 разных 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 модуль, конечно, нужно активировать.