我正在尝试将Zend应用程序连接到运行带有SQL后端的LDAP的SME服务器。
在我收到err=49
的每个请求上,表示身份验证失败,但我正在尝试的用户名/密码组合是正确的。
我的Zend应用程序的配置设置如下:
ldap.server1.host = primary.example.info
ldap.server1.accountDomainName = example.info
ldap.server1.accountDomainNameShort = example
ldap.server1.accountCanonicalForm = 2
ldap.server1.username = "CN=admin,DC=example,DC=info"
ldap.server1.password = "password"
ldap.server1.baseDn = "DC=example,DC=info"
ldap.server1.bindRequiresDn = true
我正在尝试使用以下格式登录:
用户名:Alice
密码:密码
在我的AuthController中,我用来尝试对LDAP进行身份验证的函数:
protected function _process($values) {
$auth = Zend_Auth::getInstance();
$config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', 'production');
$options = $config->ldap->toArray();
$adapter = new Zend_Auth_Adapter_Ldap($options, $values['username'], $values['password']);
$result = $auth->authenticate($adapter);
if ($result->isValid()) {
$user = $adapter::getAccountObject();
$auth->getStorage()->write($user);
return true;
}
return false;
}
我在/var/log/messages
中遇到的错误:
Mar 27 02:35:44 primary slapd[4589]: conn=1 fd=7 ACCEPT from IP=142.25.97.141:51711 (IP=0.0.0.0:389)
Mar 27 02:35:44 primary slapd[4589]: conn=1 op=0 BIND dn="cn=admin,dc=kjenkins,dc=info" method=128
Mar 27 02:35:44 primary slapd[4589]: conn=1 op=0 RESULT tag=97 err=49 text=
Mar 27 02:35:44 primary slapd[4589]: conn=1 op=1 UNBIND
Mar 27 02:35:44 primary slapd[4589]: conn=1 fd=7 closed
我知道我使用的凭据是正确的,我已尝试使用accountCanonicalForm
的所有变体,但似乎都没有。
有人能找到我做错的事吗?
答案 0 :(得分:0)
结果代码decimal 49
表示提供的凭据不正确(在某些情况下)
出于安全原因,当条目不存在时,可以返回此结果代码
为了误导攻击者)。应用程序编码器应验证绑定是否区分
通过使用已知的正确工具(例如)进行验证,名称具有正确的凭据
ldapsearch
。例如,尝试:
ldapsearch -h hostname -p port -D cn=admin,dc=kjenkins,dc=info -w password -b '' -s base '(&)'
以上搜索建立连接,将连接的授权状态更改为身份验证ID cn=admin,dc=kjenkins,dc=info
使用给定的凭据,然后从根DSE检索属性。如果此搜索成功,那么
应用程序编码器可以确保凭证是正确的。