在PHP中创建新的Active Directory用户帐户时设置密码

时间:2016-05-31 15:37:20

标签: php active-directory

此PHP脚本在没有密码的情况下在Active Directory中创建启用的用户帐户。如何设置密码?

<?php
$examplePassword = "34mlrfm$sxkf";
$WinTimestamp = "131196672000000000" //30-09-16 00:00:00

//Create unicode password
function encodePassword($password) {
    $password="\"".$password."\"";
    $encoded="";
    for ($i=0; $i <strlen($password); $i++){ $encoded.="{$password{$i}}\000";}
    return $encoded;
}

//Build Active Directory record     
$ldaprecord["accountExpires"] = $winTimestamp;
$ldaprecord["UserAccountControl"] = "544"; //544 - Account enabled, require password change
$ldaprecord['userPassword'] = encodePassword($examplePassword);
$ldaprecoed['otherAttributes'] = "Truncated from question";

$ds = ldap_connect($AD_server); // Connect to Active Directory
if ($ds) {
    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
    $r = ldap_bind($ds, $AD_Auth_User, $AD_Auth_PWD); //Bind
    $r = ldap_add($ds,$dn,$ldaprecord); //Create account
    ldap_close($ds); //Close connection
}
?>

我尝试过不同的密码编码方式。

我也尝试将密码插入$ ldaprecord [&#34; unicodepwd&#34;]。这导致&#34;服务器不愿意执行&#34;错误。

1 个答案:

答案 0 :(得分:0)

我已经开始工作了。您只能通过SSL连接设置密码,感谢@stuartbrand

使用ldap_start_tls()加密389上的流量,或使用$ds = ldap_connect('ldaps://'.$AD_server);

连接636上的流量

密码应插入$ ldaprecord [&#34; unicodepwd&#34;]属性。