我已将 Apache(在 Windows Server 上)设置为通过 Active Directory 对一个目录进行身份验证。配置设置如下:
<LocationMatch "/trac/[^/]+/login">
Order deny,allow
Allow from all
AuthBasicProvider ldap
AuthzLDAPAuthoritative Off
AuthLDAPURL ldap://<ip-redacted>:3268/cn=Users,OU=MyBusiness,DC=<dc-redacted>,DC=local?sAMAccountName?sub?(objectClass=*)
AuthLDAPBindDN trac@<dc-redacted>.local
AuthLDAPBindPassword "<password-redacted>"
AuthType Basic
AuthName "Protected"
require valid-user
</LocationMatch>
通过观察 Wireshark,我发现当我访问该页面时会发送以下内容:
对于 AD 服务器:
bindRequest(1) "trac@<dc-redacted>.local" simple
从 AD 服务器来看:
bindResponse(1) success
我假设这意味着身份验证成功了……但 Apache 并不这么认为。它向我返回 500 服务器。Apache 日志显示以下内容:
[Thu Nov 18 16:21:12 2010] [debug] mod_authnz_ldap.c(379): [client 192.168.x.x] [7352] auth_ldap authenticate: using URL ldap://<ip-redacted>:3268/cn=Users,OU=MyBusiness,DC=<dc-redacted>,DC=local?sAMAccountName?sub?(objectClass=*), referer: http://192.168.x.x/trac/Trac/login
[Thu Nov 18 16:21:12 2010] [info] [client 192.168.x.x] [7352] auth_ldap authenticate: user authentication failed; URI /trac/Trac/login [ldap_search_ext_s() for user failed][Filter Error], referer: http://192.168.x.x/trac/Trac/login
现在,该日志文件显示空白用户的身份验证失败。我感到很困惑。
知道我做错了什么吗...以及如何使 Apache 身份验证正常工作?:)
谢谢!
答案1
绑定成功,但这仅意味着"trac@<dc-redacted>.local"
已确认拥有密码"<password-redacted>"
。接下来,LDAP 库将搜索基本对话框收集的用户名和密码,并比较密码字段。这可能是您失败的原因,因为 (a) AuthLDAPURL (b) 用户名或 (c) 密码中的一个或多个存在问题。这对我来说是有效的,但到目前为止,只有未加密的版本(您正在使用);只要我尝试使用 SSL 或 TLS,就会出错...