Php Zend_Auth和SME LDAP的身份验证失败

Php Zend_Auth和SME LDAP的身份验证失败,php,authentication,zend-framework,ldap,zend-auth,Php,Authentication,Zend Framework,Ldap,Zend Auth,我正在尝试将Zend应用程序连接到运行LDAP和SQL后端的SME服务器 在每次请求中,我都会收到err=49,这表示身份验证失败,但我尝试的用户名/密码组合是正确的 My Zend应用程序的配置设置为: ldap.server1.host = primary.example.info ldap.server1.accountDomainName = example.info ldap.server1.accountDomainNameShort =

我正在尝试将Zend应用程序连接到运行LDAP和SQL后端的SME服务器

在每次请求中,我都会收到
err=49
,这表示身份验证失败,但我尝试的用户名/密码组合是正确的

My 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
的所有变体,但似乎都不起作用


有人能找到我做错了什么吗?

结果代码decimal
49
表明提供的凭据不正确(在某些情况下) 出于安全原因,当中不存在条目时,可以返回此结果代码 误导攻击者的命令)。应用程序编码人员应验证绑定是否可识别 通过使用已知的正确工具(例如)进行身份验证,name具有正确的凭据
ldapsearch
。例如,尝试:

ldapsearch -h hostname -p port -D cn=admin,dc=kjenkins,dc=info -w password -b '' -s base '(&)' 
上述搜索建立连接,将连接的授权状态更改为auth ID
cn=admin,dc=kjenkins,dc=info
使用给定的凭据,然后从根DSE检索属性。如果此搜索成功,则 应用程序编码人员可以确保凭据是正确的

另见

相信我已经解决了问题,我使用的LDAP服务器会自动在任何非本地主机连接上强制TLS/SSL。这在文档中隐藏得很深,所以我第一眼就错过了。不过,谢谢你的帮助。