LDAP 认证简介
本文档包括使用 用法
为了快速把 $username = $this->_request->getParam('username'); $password = $this->_request->getParam('password'); $auth = Zend_Auth::getInstance(); $config = new Zend_Config_Ini('../application/config/config.ini', 'production'); $log_path = $config->ldap->log_path; $options = $config->ldap->toArray(); unset($options['log_path']); $adapter = new Zend_Auth_Adapter_Ldap($options, $username, $password); $result = $auth->authenticate($adapter); if ($log_path) { $messages = $result->getMessages(); $logger = new Zend_Log(); $logger->addWriter(new Zend_Log_Writer_Stream($log_path)); $filter = new Zend_Log_Filter_Priority(Zend_Log::DEBUG); $logger->addFilter($filter); foreach ($messages as $i => $message) { if ($i-- > 1) { // $messages[2] and up are log messages $message = str_replace("\n", "\n ", $message); $logger->log("Ldap: $i: $message", Zend_Log::DEBUG); } } } Zend_Auth_Adapter_Ldap 将记录任何想要的信息细节到 $messages (更多的信息看下面),对于难以调试的程序来说,有历史记录这是个很好的功能。
上面用到 [production] ldap.log_path = /tmp/ldap.log ; Typical options for OpenLDAP ldap.server1.host = s0.foo.net ldap.server1.accountDomainName = foo.net ldap.server1.accountDomainNameShort = FOO ldap.server1.accountCanonicalForm = 3 ldap.server1.username = "CN=user1,DC=foo,DC=net" ldap.server1.password = pass1 ldap.server1.baseDn = "OU=Sales,DC=foo,DC=net" ldap.server1.bindRequiresDn = true ; Typical options for Active Directory ldap.server2.host = dc1.w.net ldap.server2.useSsl = true ldap.server2.accountDomainName = w.net ldap.server2.accountDomainNameShort = W ldap.server2.accountCanonicalForm = 3 ldap.server2.baseDn = "CN=Users,DC=w,DC=net" Zend_Auth_Adapter_Ldap 首先来尝试用 OpenLDAP 服务器 s0.foo.net 来认证用户,如果不论什么原因认证失败,将尝试 AD 服务器 dc1.w.net 。
这个配置示例了在不同的域的服务器的多域认证,也可以在同一域中用多个服务器来提供冗余。 注意在这个例子中,即使 OpenLDAP 不需要用于 Windows 的短 NetBIOS 风格的域名,我们仍在这里提供它以保证命名正规化 (参见下面的 Username Canonicalization 一节)。 The API
下面是一个选项参数包含两组服务器选项( Array ( [server2] => Array ( [host] => dc1.w.net [useSsl] => 1 [accountDomainName] => w.net [accountDomainNameShort] => W [accountCanonicalForm] => 3 [baseDn] => CN=Users,DC=w,DC=net ) [server1] => Array ( [host] => s0.foo.net [accountDomainName] => foo.net [accountDomainNameShort] => FOO [accountCanonicalForm] => 3 [username] => CN=user1,DC=foo,DC=net [password] => pass1 [baseDn] => OU=Sales,DC=foo,DC=net [bindRequiresDn] => 1 ) ) bindRequiresDn 选项)时 AD 不要求在 DN 表单中的有用户名,这意味着我们可以忽略很多和为认证用户名获取 DN 相关的选项。
服务器名(如上面的 ' 用多组服务器选项,适配器可以在多域的环境中认证用户并提供 failover (估计是失败后尝试下一个服务器),所以如果一个服务器不可用,将查询另一个。
服务器选项
在 Zend_Auth_Adapter_Ldap 的上下文中 的每组服务器选项包含下列选项,它们基本上不可修改地传递给
收集调试信息
特定服务器的通用选项Active Directory 的选项对于 ADS,下列选项值得注意:
OpenLDAP 的选项对于 OpenLDAP 或一般的使用典型的 posixAccount 风格的 LDAP 服务器,下面的选项值得注意:
|