Apache-2.2

AuthLDAPURL 中的更多搜尋過濾器

  • June 17, 2013

是否可以在 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或mail。像…

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>

謝謝托寧!

我猜你的意思是尋找屬性uidmail(不過濾那些)。儘管RFC 2255允許,但不可能立即在 LDAP URL 中使用 2 個不同的屬性。

mod_authnz_ldap 單獨:不可能

Apache mod_authnz_ldap 文件指出 URL 必須是:ldap://host:port/basedn?attribute?scope?filterwith

  • 屬性:要搜尋的屬性。儘管RFC 2255允許使用逗號分隔的屬性列表**,但無論提供多少屬性,都只會使用第一個屬性**。如果未提供任何屬性,則預設使用 uid。選擇一個在您將使用的子樹中的所有條目中唯一的屬性是一個好主意。
  • filter:一個有效的 LDAP 搜尋過濾器。如果未提供,則預設為 (objectClass=*),它將搜尋樹中的所有對象。過濾器限制為大約 8000 個字元(Apache 原始碼中 MAX_STRING_LEN 的定義)。這對於任何應用程序都應該綽綽有餘。

使用帶有 mod_authn_alias 的 2 個提供程序

但是,添加另一個 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模組需要被啟動。

引用自:https://serverfault.com/questions/514083