Я хочу определить двух разных поставщиков аутентификации в моем apache2 .htaccess на случай, если один из них выйдет из строя (желательно ldap, но я хочу иметь возможность войти в систему через локальный файл htpasswd, даже если ldap выйдет из строя)
Я пыталсяэтотно я не могу заставить его работать, так как Apache жалуется на уже определенный тип аутентификации.
Если я определю оба типа аутентификации в своем site.conf, я не смогу войти через локальный файл htpasswd из-за строки «Require», которая гарантирует правильную группу ldap, а локальный файл не сможет обработать это правило, поскольку ему нужен только Require valid-user
.
Require ldap-group CN=admins,OU=Groups,OU=main,DC=my,DC=tld
решение1
Если вы указали file
и ldap
провайдеров аутентификации и (используя AuthBasicProvider ldap file
директиву), то вы можете определить следующий набор правил, чтобы иметь возможность аутентифицироваться из обоих. Я предполагаю, что вы используете атрибут uid
в качестве имени пользователя, но если нет, то не должно быть слишком сложно переписать условие ниже.
<RequireAny>
<RequireAll>
Require valid-user
Require ldap-group cn=admins,ou=groups,out=main,dc=my=dc=tld
</RequireAll>
<RequireAll>
Require valid-user
Require not ldap-attribute uid="%{REMOTE_USER}"
</RequireAll>
</RequireAny>
Таким образом, пользователь считается аутентифицированным, если выполняется любое из следующих условий:
- Пользователь действителен и имеет соответствующее членство в группе LDAP. В этом случае пользователь должен быть аутентифицирован бэкэндом
ldap
. - Атрибут
uid
пользователя не соответствует указанному имени пользователя, но пользователь действителен. Это может произойти только если атрибутuid
не существует, но если он существует, тоldap
поставщик не смог найти пользователя в базе данных LDAP. Таким образом, в этом случае действительность учетных данных пользователя была определена поставщикомfile
.