ユーザー自身または管理者が LDAP ユーザーのパスワードを変更するための C# コードを実行しています。ユーザーを正常に認証できます。ChangePassword
ただし、またはSetPassword
動作を呼び出そうとすると、次のエラー メッセージが表示されます。
InnerException: ディレクトリ プロパティがキャッシュ内に見つかりません。
私のコードは次のとおりです。
LDAPPath = "LDAP://10.29.0.1:50405/DC=DCServerName,DC=local"
LDAPAdminDN = "CN=useradmin,OU=SystemAccounts,DC=DCServerName,DC=local"
LDAPAdminPwd = "S8kf5t3!"
username = "user1"
password = "oldPassword1"
npassword = "newPassword1"
DirectoryEntry root = new DirectoryEntry(
LDAPPath,
LDAPAdminDN,
LDAPAdminPwd,
AuthenticationTypes.None
);
using (root)
{
DirectorySearcher searcher = new DirectorySearcher(root,
string.Format("(CN={0})", username)
);
var result = searcher.FindOne();
if (result != null)
{
var user = result.GetDirectoryEntry();
try
{
user.Invoke("ChangePassword", new object[] { password, npassword });
user.Properties["LockOutTime"].Value = 0;
//user.Invoke("SetPassword", new object[] { npassword });
user.CommitChanges();
}
catch (Exception e)
{
string innerMsg = e.InnerException.Message;
return false;
}
}
この問題を解決してパスワードを正常に変更する方法を知りたいです。君たちありがとう
更新: 以下のようにいくつかのオプションを試しましたが、すべてが機能しません: 1 つ:
int intPort = 50405;
user.Invoke("SetOption", new object[] { ADS_OPTION_PASSWORD_PORTNUMBER, intPort });
user.Invoke("SetOption", new object[] { ADS_OPTION_PASSWORD_METHOD, ADS_PASSWORD_ENCODE_CLEAR });
二:
user.UsePropertyCache = true;
それらはすべて0x80072020のエラーを受け取ります
私のIT担当者は「非SSLでパスワードを変更」を有効にしましたが、AD LDS部分で設定が重要かどうかはわかりません。
質問: なりすましコードを使用する代わりに、この方法で管理者アカウントを使用してユーザーのパスワードを変更する権利はありますか?