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>
谢谢 Tonin!
答案1
我猜你的意思是寻找属性uid
或mail
(而不是过滤这些)。不可能立即在 LDAP URL 中使用 2 个不同的属性,尽管RFC 2255允许这样做。
单独使用 mod_authnz_ldap:不可能
阿帕奇mod_authnz_ldap 文档规定 URL 必须类似于ldap://host:port/basedn?attribute?scope?filter
:
- 属性:要搜索的属性。尽管RFC 2255允许使用逗号分隔的属性列表,无论提供多少个属性,都只会使用第一个属性。如果没有提供任何属性,则默认使用 uid。最好选择一个在您将使用的子树的所有条目中唯一的属性。
- 筛选:有效的 LDAP 搜索过滤器。如果未提供,则默认为 (objectClass=*),它将搜索树中的所有对象。过滤器限制为大约 8000 个字符(Apache 源代码中 MAX_STRING_LEN 的定义)。这对于任何应用程序来说都足够了。
使用 2 个带有 mod_authn_alias 的提供商
但是,添加另一个 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
当然,模块需要激活。