我使用 Apache 和 LDAP 取得了一些成功。首先,它可以工作……但不是完全可以。
因此,基本的 LDAP 配置如下所示:
AuthLDAPBindDN "omitting this"
AuthLDAPBindPassword "passwordyeah!"
AuthLDAPURL "ldap://DOMAIN.COM/ou=stuff,dc=domain,dc=com?userPrincipalName?sub?(objectClass=user)"
LDAPReferrals Off
AuthType Basic
AuthName "Use your email address to connect."
AuthBasicProvider ldap
AuthUserFile /dev/null
这其实没什么问题。但事情就是这么奇怪。如果我输入这个:
Require user [email protected]
我可以进行身份验证。我可以使用多个用户,这没问题。如果我输入
Require valid-user
身份验证不起作用。如果我尝试域用户,则会失败。(所有用户都是其中的一部分)
Require ldap-group CN=Domain Users,CN=Users,DC=DOMAIN,DC=COM
然而,如果我指向一个较小的群体,它就起作用了。
因此,当我仅使用 require user 进行身份验证时[电子邮件保护]我看到的是:
AH01697: auth_ldap authenticate: accepting [email protected]
当我输入“需要有效用户”时,我得到了精确的相同的消息。但是,身份验证对话框反复出现。每次身份验证都成功(根据日志)
用于日志目的。当我需要 ldap“域用户”时,我在日志中得到以下内容:
didn't match with attr member [Comparison false (adding to cache)][5 - Compare False]
(也要明白这个组很大)当我使用较小的组时,日志会显示这样的成功:
authorization successful (attribute member) [Comparison true (adding to cache)][6 - Compare True]
我只是不太清楚这里发生了什么。但我真的希望“valid-user”能够正常工作。
答案1
我认为搜索基数为 ou=stuff,dc=domain,dc=com 会阻止找到其他容器中的对象。请尝试将基数仅设置为 dc=domain,dc=com
您也可以删除 objectclass=user 过滤器。根据https://msdn.microsoft.com/en-us/library/windows/desktop/ms680857%28v=vs.85%29.aspxuserprincipalname 只用于用户类,所以它是隐式的。在同一页中,您可以看到它可通过全局目录端口使用,因此您可以使用它来代替常规 ldap 绑定(应该更快)。
因此您的 AuthLDAPURL 将是:
AuthLDAPURL ldap://DOMAIN.COM:3268/dc=domain,dc=com?userPrincipalName?sub
它看起来很像 mod_authnz_ldap 模块的“使用 Active Directory”部分中的示例:https://httpd.apache.org/docs/2.4/mod/mod_authnz_ldap.html
最后要提醒的是:您使用了 domain.com srv 主机表示法(真棒!),但 Apache 不了解 AD 站点。因此,如果您有多个站点并且网络延迟很高,您可能会查询远处的 ldap 服务器,并需要很长时间进行身份验证。