我正在尝试查询一个奇怪的 LDAP 结构,我需要对其进行身份验证。我们的应用程序使用 REMOTE_USER 变量来确定用户。我无权访问 LDAP 目录,因此看不到它的日志。
该结构需要我查询树的一个子部分,由编写用于测试 LDAP 查询的 Perl 脚本演示(它可以正常工作并按预期返回用户列表)
use Net::LDAP;
use Net::LDAP::Entry;
$ldap = Net::LDAP->new( 'ldapdevel.my.edu.au' ) or die "$@";
$mesg = $ldap->bind( 'uid=binduser,o=my.edu.au', password => 'bindpass' );
if( $mesg->code ) {
die $mesg->error;
}
$mesg = $ldap->search( # perform a search
base => "o=my.edu.au",
filter => "cn=devraj"
);
$mesg->code && die $mesg->error;
foreach $entry ($mesg->entries) {
$entry->dump;
}
我的 Apache 配置在 VirtualHost 条目中有以下内容,旨在模仿 Perl 脚本中描述的相同查询。
<Location />
AuthType Basic
AuthName "My Application"
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthLDAPBindPassword bindpass
AuthLDAPBindDN "uid=binduser,o=my.edu.au"
AuthLDAPUrl "ldap://ldapdevel.my.edu.au/o=my.edu.au?cn?one"
Require valid-user
</Location>
我还可以确认 Apache 确实成功绑定到 LDAP 目录。
Apache 错误日志,用于 LDAP 身份验证的消息,这表明 URI 是 / 因此 Apache 正在搜索目录的顶部,而不是 o=my.edu.au 的子树
[Tue Sep 04 16:22:01 2012] [notice] Apache/2.2.15 (Unix) DAV/2 mod_wsgi/3.2 Python/2.6.6 configured -- resuming normal operations
[Tue Sep 04 16:22:20 2012] [info] [client xxx.xxx.xxx.xxx] [26064] auth_ldap authenticate: user devraj authentication failed; URI / [User not found][No such object]
[Tue Sep 04 16:22:20 2012] [error] [client xxx.xxx.xxx.xxx] user devraj not found:
我意识到问题出在 AuthLDAPUrl,我的问题是我在 AuthLDAPUrl 中做错了什么,还是应该使用另一个指令?
我还尝试将每个参数分别配置为 mod_authz_ldap,如下所示:
<Location />
AuthType Basic
AuthName "My LDAP authenticated app"
AuthzLDAPLogLevel debug
AuthBasicProvider ldap
AuthBasicAuthoritative off
AuthzLDAPAuthoritative off
AuthzLDAPBindPassword bindpass
AuthzLDAPBindDN "uid=binduser,o=my.edu.au"
AuthzLDAPMethod ldap
AuthzLDAPServer ldapdevel.my.edu.au
AuthzLDAPUserBase o=my.edu.au
AuthzLDAPUserKey cn
AuthzLDAPUserScope base
AuthLDAPRemoteUserAttribute cn
Require valid-user
</Location>
这确实有效!但是... Apache 尝试绑定为尝试登录的用户,这显然失败了。如果我使用绑定用户凭据登录,它会通过身份验证,错误日志提取:
[Fri Sep 07 14:14:27 2012] [error] [client xxx.xxx.xxx.xxx] [15628] bind as cn=devraj,l=X,ou=Students,o=my.edu.au failed: 49
[Fri Sep 07 14:14:27 2012] [error] [client xxx.xxx.xxx.xxx] [15628] basic LDAP authentication of user 'devraj' failed
[Fri Sep 07 14:14:27 2012] [error] [client xxx.xxx.xxx.xxx] access to / failed, reason: verification of user id 'devraj' not configured
谢谢你的时间。