後に壊れている、私のC#のコードは、単に動作を停止し、常にエラーメッセージを送り返す(システムは、認証要求を処理するためにドメインコントローラに接続できませんパスワードを変更しようとしているときは、もう一度お試しください)。C#UserPrincipal.ChangePasswordは、KB3167679とKB3177108
https://support.microsoft.com/en-us/kb/3167679
https://support.microsoft.com/en-us/kb/3177108
private void ChangePassword(string username, string oldPassword, string newPassword)
{
string machineName = Environment.MachineName;
string contextUser = String.Format(@"{0}\{1}", machineName, username);
using (PrincipalContext ctx = new PrincipalContext(ContextType.Machine, machineName, null, ContextOptions.Negotiate, contextUser, oldPassword))
using (UserPrincipal user = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, username))
{
user.ChangePassword(oldPassword, newPassword);
}
}
提出資格が有効でない場合、私は提出の資格が有効であるので、不正なユーザ名やパスワードを言って、特定のエラーメッセージが表示されます。
私は多くのシナリオを試してみましたが、それらはすべて失敗:
- は私がPrincipalContextのためにそのパスワードを変更するユーザーのユーザー/パスワードを使用してください。
- PrincipalContextに異なるユーザー/パスワードを使用します。
- ユーザーPrincipalContextのローカル管理ユーザー/パスワード。
なしに動作しません。
は、この「新行動」について多くのことを読んで、私は無効に、ロックされていない、有効でないローカルユーザーを変更する方法を見つけるように見えることはできません。
これらの記事は私に似ており、一部の人々は唯一のActive Directoryとローカルでないユーザーアカウントのための回避策を得たように思えます。
C# Active Directory Invoke “ChangePassword” cannot contact domain
Changing Active Directory user passwords in c#/asp.net after MS patch KB3167679
c# Change AD password Directoryservices
誰もがしてください私のコードで間違っているものを私に伝え、それがパッチ以来破った理由を私に説明できますか?
machinenameではなく、ローカルストアmachinenameがヌルである必要があるため、新しいPrincipalContext(ContextType.Machine、null、null、ContextOptions.Negotiate、contextUser、oldPassword)を試してください。 – rene
試しましたが、同じエラーメッセージが表示されます。ヌルまたはマシン名を2番目の引数に渡すと、同じ動作が行われます。 – Doum