2016-09-06 5 views
2

後に壊れている、私の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

誰もがしてください私のコードで間違っているものを私に伝え、それがパッチ以来破った理由を私に説明できますか?

+0

machinenameではなく、ローカルストアmachinenameがヌルである必要があるため、新しいPrincipalContext(ContextType.Machine、null、null、ContextOptions.Negotiate、contextUser、oldPassword)を試してください。 – rene

+0

試しましたが、同じエラーメッセージが表示されます。ヌルまたはマシン名を2番目の引数に渡すと、同じ動作が行われます。 – Doum

答えて

0

あなたはちょうどあなたがNetUserChangePasswordを使用することができるはずローカルユーザーのパスワードを変更したい場合。

それはまだ私のために働く。少なくともローカルマシンの場合は(ドメイン名パラメータとしてその名前を使用します)。

+0

完全なマネージコードソリューションを探しています。アンマネージドコードではありません。 – Doum

+0

さて、それを手伝ってはいけません。なぜ完全なマネージコードの必要性?これは単なる単純な機能であり、使用するリスクはないはずです。 –

0

マイクロソフトでは、この資料を更新しましたhttps://support.microsoft.com/en-us/kb/3177108。ここでは、オリジナルの「修正」によって作成された問題と、Kerberosおよびセルフサービスのパスワードリセットを使用するためのヒントを示しました。

2016年10月11日、マイクロソフトではhttps://technet.microsoft.com/en-us/library/security/ms16-101.aspxに関連する修正プログラムを再リリースし、元の更新プログラム(ローカルアカウントのパスワードを変更できなくなったということを含めてhttps://support.microsoft.com/en-us/kb/3177108で読むことができます。 "既知の問題#3")。

これで、ローカルのパスワードを最新のアップデート(2016年10月11日)で今すぐ変更できるはずです。