通过PHP和LDAPS设置Active Directory密码

时间:2014-07-19 17:20:03

标签: php active-directory ldap

好吧,我很难过。

我正在尝试编写一些PHP代码,以使用密码在Active Directory中创建用户。

如果与Server 2008r2 Windows域控制器交谈,那么PHP将运行Ubuntu服务器。

我可以使用PHP创建用户没有问题,但我无法设置密码。我尝试过在互联网上感觉像每个可能的代码,但它不会起作用。

我相信我必须创建用户然后再修改密码。因此,我有以下代码。

$domadlogin =  'domainadminusername';
    $domadpw =  'a2b3c4d5e';
    $domctrl = 'ldaps://DCIPADDRESS';

    $ldapServer = $domctrl;
    $ldapBase =  'OU=Users,DC=example,DC=co,DC=uk';
    $ds = ldap_connect($ldapServer);
    if (!$ds) {die('Cannot Connect to LDAP server');}
    $ldapBind = ldap_bind($ds,$domadlogin,$domadpw);
    if (!$ldapBind) {die('Cannot Bind to LDAP server');}
    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);

    $dn_user='CN=Test User,OU=New Users,OU=Users,DC=example,DC=co,DC=uk';;

    $newPassword =  "1.Password!";
    $newPassword = "\"" . $newPassword . "\"";
    $len = strlen($newPassword);
    for ($i = 0; $i < $len; $i++)
    {
    $newPassw .= "{$newPassword{$i}}\000";
    }
    $newPassword = base64_encode($newPassw);
    $userdata['unicodePwd'] = $newPassword;
    $result = ldap_modify($ds, $dn_user, $userdata);
        if ($result) echo "User modified!" ;
    else echo "There was a problem!";

    ldap_unbind($ds);

我知道LDAPS正在运行

ldapsearch -x -d 2 -LLL -H ldaps://DCIPADDRESS -b 'OU=Users,DC=example,DC=co,DC=uk' -D 'domainadminusername' -W '(sAMAccountName=username)'

任何人都可以告诉我我做错了什么。

由于

1 个答案:

答案 0 :(得分:0)

我在这里不是PHP作家,我回答了一个封闭式问题中的一些指导原则:

使用PHP,您可以使用LDAP更改或创建具有正确密码和AD用户密码的用户,并在SSL连接上进行简单绑定。

为此,您需要在AD服务器上安装证书。简单的方法(不是更有吸引力)是在您的域上安装Microsoft证书服务器(企业安装see Configuring Microsoft Active Directory for SSL Access),然后重新启动域控制器。您还可以使用OpenSSL生成证书并将其安装在计算机上(请参阅How to enable LDAP over SSL with a third-party certification authority)。

以下是允许在SSL连接上使用其密码创建用户的LDIF文件示例,您将找到我为密码生成基本64字符串的方式:

# Imported with :
# ldifde -i -t 636 -f .\Annuaire3.ldf
# Password generated by ("" must be encoded inside):
# stringconverter.exe \"test.2011\" /unicode /encode
# Connexion then tested with :
# runas /user:jdupont cmd.exe (password is test.2011)

dn: cn=Jean Dupont,OU=MonOU,DC=societe0,DC=fr
changetype: add
objectClass: user
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: Jean Dupont
givenName: Jean
sn: Dupont
mail: jean.Dupont@societe.fr
telephoneNumber: 9999
userAccountControl: 544
sAMaccountName: jdupont
userPrincipalName: jdupont@societe.fr
unicodePwd:: IgB0AGUAcwB0AC4AMgAwADEAMQAiAA==