Множественный AuthBasicProvider в Apache mod_auth_basic

Захотелось мне, чтобы апач аутентифицировал пользователей одновременно в htpasswd и в ldap, равноценно, вне зависимости от того, удалось ли ему авторизовать пользователя другим способом.
Казалось бы — вот они, канонические примеры, взятые с официальной документации:


AuthName "Private"
AuthType Basic
AuthBasicProvider file ldap
AuthUserFile /usr/local/apache/passwd/passwords
AuthLDAPURL ldap://ldaphost/o=yourorg
Require valid-user

Все хорошо до тех пор, пока нам не потребуется, чтобы пользователь успешно аутентифицировался в ldap, даже если его имя уже найдено в file и пароль не подошел.

Казалось бы — у ldap есть отличный параметр: AuthzLDAPAuthoritative
Давайте ldap будет первым, и не будет авторитетным.


AuthBasicProvider ldap file
AuthzLDAPAuthoritative Off

Работает? Нет. По логике совершенно непонятно, почему. Ведь ldap — не авторитет.
Оказывается, есть еще один параметр: AuthLDAPBindAuthoritative
И именно он определяет, будет ли процесс аутентификации/авторизации передан следующему модулю в случае, если объект для данного пользователя будет найден, но bind не будет успешен.
Таким образом, следует использовать такие параметры:


AuthName "Private"
AuthType Basic
AuthBasicProvider ldap file
AuthzLDAPAuthoritative Off
AuthLDAPBindAuthoritative Off
AuthUserFile /usr/local/apache/passwd/passwords
AuthLDAPURL ldap://ldaphost/o=yourorg
Require valid-user

Множественный AuthBasicProvider в Apache mod_auth_basic: Один комментарий

  1. ajaxas

    Это офигеть как интересно. Ну и работка у тебя! :)

    А ты видел, что ваш униджайн на похорониксе рекламируют?

Добавить комментарий

Ваш e-mail не будет опубликован.

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>