Zend LDAP身份验证 - 如何setIdentity和getIdentity

时间:2014-10-06 10:37:51

标签: php zend-framework active-directory ldap

我正在使用adldap库来针对Active Directory对用户进行身份验证。下面是我用来验证的代码片段

$username = $_POST['username'];
$password = $_POST['password'];

require_once '/adlap/adLDAP.php';

try {
  $adldap = new adLDAP();
}
catch (adLDAPException $e) {
  echo $e;
  exit();   
}

$authUser = $adldap->user()->authenticate($username, $password);

我应该如何为用户 setIdentity

在我们存储用户名和密码的登录系统中,我们可以如下所述setIdentity

$adapter = $this->_getAuthAdapter();
$adapter->setIdentity($values['username']);
$adapter->setCredential($values['password']);


protected function _getAuthAdapter() {

        $dbAdapter = Zend_Db_Table::getDefaultAdapter();
        $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);

        $authAdapter->setTableName('users')
                ->setIdentityColumn('username')
                ->setCredentialColumn('password')
                ->setCredentialTreatment('SHA1(CONCAT(?,salt))');


        return $authAdapter;
    }

我没有在数据库中存储密码并直接针对Active Directory进行检查。所以我无法使用上述解决方案。 我该如何设置用户身份,以便我可以检查用户是否具有像这样的

 $auth = Zend_Auth::getInstance();
  if ($auth->hasIdentity()){
  }

我引用了以下Stackoverflow问题 Get display name for Zend LDAP Authentication。 但是我不确定我们将如何“获取('LDAP_host')”Zend Registry以及我们应该如何设置它。下面是我困惑的代码行  'host'=>要是Zend_Registry ::得到( 'LDAP_host'),

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

Zend_Registry::get('LDAP_host')只返回LDAP服务器的主机名。在该行代码之前的某处,您会找到一条类似于Zend_Registry::set('LDAP_host', 'ldap.example.com')的行,它将ldap.example.com设置为LDAP服务器。

在您的情况下,

getAuthAdapter()会返回Zend_Auth_Adapter_DbTable的实例,但您需要Zend_Auth_Adapter_Ldap的实例。因此,您必须调用不同的方法/函数getLdapAuthAdapter()或重写当前方法。

public function getLdapAuthAdapter() {
    return new Zend_Auth_Adapter_Ldap(array(
        'host'                    => 'ldap.example.com',
        'accountDomainName'       => 'example.com',
        'accountDomainNameShort'  => 'EXAMPLE',
        'accountCanonicalForm'    => 3,
        'username'                => "CN=user1,DC=example,DC=com",
        'password'                => 'pass1',
        'baseDn'                  => "DC=example,DC=com",
        'bindRequiresDn'          => true,
     ));
}

$adapter = $this->getLdapAuthAdapter();
$adapter->setIdentity($values['username']);
$adapter->setCredential($values['password']);
$result = $adapter->authenticate();

希望以某种方式帮助。