6

エラーの発生:

サーバーは実行したくない

PHPを介してADのunicodePwdを変更している間。ただし、ユーザーの属性を検索、追加、削除、および変更することはできます。

管理者アカウントを使用してバインドし、管理者はすべてのユーザーのパスワードを変更する完全な権限を持っています。

これが私が使用しているコードです:

<?php
$dn = "CN=Vishal Makwana,OU=Address Book,DC=example,DC=com";
$ad = ldap_connect("ldap://example.com")
      or die("Couldn't connect to AD!");
ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
$bd = ldap_bind($ad,"admin@example.com","admin1");

    if($bd) {
        echo "AD bind successfully";  
      }
    else {
        echo "Couldn't bind AD";;
    }

$user["unicodePwd"] = "asdf1234";

$result = ldap_mod_replace($ad, $dn, $user);
if ($result) echo "User modified!"; else
             echo "There was a problem!";

ldap_unbind($ad);
?>
4

2 に答える 2

9

LDAP 経由で AD にパスワードを設定するには、正確に行う必要があることがいくつかあります。

  • SSL 接続 (ldaps://) を使用する必要があります。

  • パスワードは引用符で囲む必要があります

  • (引用された) パスワードは 16 ビット Unicode (UTF-16LE) でエンコードする必要があります

設定しようとしているパスワードが通常の ASCII 文字であると仮定すると、次のコード サンプルに示すように、ASCII 文字列の各バイトの後に \000 バイトを追加することで、Unicode 変換を実行できます。

したがって、例は次のようになります。

$newpassword = "asdf1234";
$newpassword = "\"" . $newpassword . "\"";
$len = strlen($newpassword);
for ($i = 0; $i < $len; $i++) $newpass .= "{$newpassword{$i}}\000";
$user["unicodePwd"] = $newpass;
于 2012-05-26T05:01:45.577 に答える
2

多くの検索と多くの時間を費やした後、私は最終的にLDAPライブラリを使用してPHPコードからActiveDirectoryユーザーパスワードを変更することができます。

PHPコードからのActiveDirectoryサーバーとのLDAPの接続が必要です。また、フィールドを変更する必要がありunicodePwdます。

ldap_connect(ldaps://IP, 636);
ldap_connect(ldaps://IP, 389);
于 2012-06-14T14:09:00.323 に答える