当针对 LDAP 服务器进行AuthType Basic
身份验证时,Apache 首先绑定以搜索用户的 DN,然后绑定该 DN 以测试用户的密码。挑战在于,使用 AD,您通常无法执行匿名绑定。因此,您必须设置AuthLDAPBindDN
。
但是,我说,我已经知道 DN 了!我不需要绑定-搜索-绑定,我只需绑定为 即可cn=_username_,OU=Employees,DC=megacorp,DC=com
!
这似乎是不可能的,但我想我会问:我能否说服 Apache 通过简单地动态构建 DN 来跳过绑定和搜索要用于绑定的 DN,还是我必须与当地官僚机构沟通以获取一个特殊帐户,我可以使用该帐户绑定来搜索我想要验证的用户?
谢谢!
—丹尼
答案1
不幸的是,mod_auth_ldap 似乎坚持要构建和执行搜索,而不是仅仅尝试使用您提供的 DN 进行绑定。根据我的经验,这是大多数情况;大多数通过 ldap 访问 Active Directory 的应用程序(而不是使用本机 NT 用户 API)宁愿先搜索再绑定,而不是仅仅尝试绑定。
从好的方面来看(如果你可以这么称呼的话),只要你的 ldap 树中没有权限方面的任何混乱,没有任何权限的用户帐户就应该可以满足你的需求;Authenticated Users 中的成员身份应该足以完成你搜索用户需要做的所有事情。它甚至可以从域用户中剥离出来并分配到不同的主要组;这应该会稍微缓解当地的官僚作风。
答案2
实际上,Apache 2.3 中的选项似乎是 AuthLDAPInitialBindAsUser 和 AuthLDAPInitialBindPattern。
AuthLDAPCompareAsUser 和 AuthLDAPSearchAsUser 有点相关,但它们听起来只起作用后初始绑定已经发生。
我实际上还没有尝试过(因为我没有在任何地方安装 apache 2.3,至少现在还没有)但我认为你需要的配置是这样的:
AuthLDAPInitialBindAsUser on
AuthLDAPInitialBindPattern (.+) cn=$1,OU=Employees,DC=megacorp,DC=com
答案3
Apache 2.3.6 及更高版本支持AuthLDAPCompareAsUser,您可能正在寻找它。
http://httpd.apache.org/docs/2.3/mod/mod_authnz_ldap.html#authldapcompareasuser
该分支处于测试阶段,可能还不能轻易被您的操作系统访问。