使用Zend_Auth和SME LDAP进行身份验证失败

时间:2012-03-27 18:12:09

标签: php authentication zend-framework ldap zend-auth

我正在尝试将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的所有变体,但似乎都没有。

有人能找到我做错的事吗?

1 个答案:

答案 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检索属性。如果此搜索成功,那么 应用程序编码器可以确保凭证是正确的。

另见