我想在我的 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
。