AuthLDAPURL 中的更多搜索过滤器

AuthLDAPURL 中的更多搜索过滤器

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

我猜你的意思是寻找属性uidmail(而不是过滤这些)。不可能立即在 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当然,模块需要激活。

相关内容