我想在我的 apache2 .htaccess 中定义两个不同的身份验证提供程序,以防其中一个失败(所需的是 ldap,但我希望即使 ldap 通过本地 htpasswd 文件失败也能登录)
我试过这但我无法让它工作,因为 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
。