Zend_Auth_Adpter_Ldap到Active Directory - 配置问题

时间:2013-03-08 10:06:01

标签: php zend-framework active-directory ldap zend-auth

我想弄清楚如何配置Zend_Auth_Adapter_Ldap来对我们的ActiveDirectory进行身份验证。手动验证工作没有问题,但我无法使用Zend_Auth_Adapter_Ldap使其工作。

这是最简单的方法。 这有效!

ldap_set_option($ldapcon, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapcon, LDAP_OPT_REFERRALS, 0);

$ldapcon = ldap_connect("ldaps://srv.dom.de", 636);
$bind = ldap_bind($ldapcon, "CN=USERNAME,OU=Benutzer,OU=DOM,DC=dom,DC=de", "PASSWORD"); 

这是我尝试配置Zend_Auth_Adapter_Ldap的方法。 这不起作用!

ad.server2.host                = srv.dom.de
ad.server2.port                = 636
ad.server2.bindRequiresDn      = false
ad.server2.baseDn              = "OU=Benutzer,OU=DOM,DC=dom,DC=de"
ad.server2.accountFilterFormat = "CN=%s"
ad.server2.useSsl              = true
ad.server2.useStartTls         = false
;ad.server2.accountDomainName   = "dom.de"
;ad.server2.username            = "CN=TESTUSER"
;ad.server2.password            = "TESTPASS"

我尝试将accountFilterFormat设置为更像AD的方式,但不会产生任何不同的结果......

ad.server2.accoutnFilterFormat = "(&(objectclass=user)(sAMAccountName=%s)"

目前的debuf输出如下:

Ldap: 1: host=srv.dom.de,port=636,bindRequiresDn=,
         baseDn=OU=Benutzer,OU=DOM,DC=dom,DC=de,accountFilterFormat=CN=%s,
         useSsl=1,useStartTls=

Ldap: 2: USERNAME authentication failed: 0x31 
         (Invalid credentials; 80090308: LdapErr: DSID-0C090334, 
         comment: AcceptSecurityContext error, data 525, vece): USERNAME

我现在尝试了很多东西,尝试调试Zend-Code本身,但我无法理解。如果有人对我需要设置的选项有更多的了解,我会非常,非常好!

1 个答案:

答案 0 :(得分:1)

这毕竟只是一个配置问题。仔细阅读文档会产生以下配置:

ad.server2.host                   = srv.dom.de
ad.server2.port                   = 636
ad.server2.bindRequiresDn         = false
ad.server2.baseDn                 = "OU=Benutzer,OU=DOM,DC=dom,DC=de"
ad.server2.accountFilterFormat    = "CN=%s"
ad.server2.useSsl                 = true
ad.server2.useStartTls            = false
ad.server2.accountCanonicalForm   = 3
ad.server2.accountDomainNameShort = "dom"

这就是全部。针对AD的身份验证通过用户名:dom\username完成,因此accountCanonicalForm必须设置为3,这是反斜杠样式语法,然后accountDomainNameShort定义域的部分规范帐户名称。

一旦理解得非常合乎逻辑,但在没有任何知识的情况下搞清楚......好吧,它现在正在运作:)