2017-05-08 4 views
0

ボタンがあり、そのクリックイベントはさまざまな検証コードで実行され、検証に合格すると、メソッド「ChangePassword」が呼び出されます。Active Directoryのパスワード変更に関する問題の処理に関する問題

public void ChangePassword(string userName, string oldPassword, string newPassword) 
    { 
     try 
     { 
      new ApplusActiveDirectoryUtil().CheckParameter(ref userName, true, true, false, 21, "User Name"); 

      DirectoryEntry userEntry = _directoryInfo.GetUserEntry(userName); 
      userEntry.Invoke("ChangePassword", new Object[] { oldPassword, newPassword }); 
      //unlock account 
      userEntry.Properties["LockOutTime"].Value = 0x0000; 
      userEntry.CommitChanges(); 
      userEntry.Dispose(); 
      userEntry.Close(); 
     } 
     catch (Exception ex) 
     { 
      _directoryInfo.Initialize(); 
      DirectoryEntry domainEntry = _directoryInfo.DomainDirectoryEntry; 
      ApplusActiveDirectoryDomainPolicy domainPolicy = new ApplusActiveDirectoryDomainPolicy(_directoryInfo.DomainDirectoryEntry); 
      string message = "Password entered was wrong or password entered was the same as the previous " + domainPolicy.PasswordHistoryLength + " passwords set."; 
      throw new Exception(message, ex); 
     } 
    } 

私がいる問題は、この行...

userEntry.Invoke("ChangePassword", new Object[] { oldPassword, newPassword }); 

がエラーを与えるということです...

System.Runtime.InteropServices.COMException(0x80070056) : 指定されたネットワークパスワードが正しくありません。

ユーザーは「現在のパスワード」テキストボックスにパスワードを入力したときにエラーが発生しますが、現在のパスワードと一致しません。

私は

if (txtConfirmNewPassword.Text != user.Password) 
    { 
     SetChangePasswordMessage("Password entered was wrong"); 
    } 

が、私は何を読んでから..行うことでこれを処理しようとしましたが、ユーザーのADのパスワードを取得することはできません。

これをキャッチすることなく正常に処理できますか?

+1

資格情報を最初に検証したら、これが成功するとパスワード変更が実行されます。 – Equalsk

+0

それはまさにそれです!私はあなたのアドバイスを手に入れました。ありがとうございました – MadDev

答えて

0

ありがとうございますEqualskコメント私は解決策を見つけました。

まず、資格情報を検証する必要がありました。資格情報が有効な場合は、ChangePasswordメソッドを呼び出してください。

  bool IsValidate = Membership.ValidateUser(user.UserName, txtOldPassword.Text); 
      if (!IsValidate) 
      { 
       SetChangePasswordMessage("Password entered was wrong or password entered was the same as the previous " + domain.PasswordHistoryLength + " passwords set."); 
      } 
      else 
      { 
       new ApplusActiveDirectoryMembership(admin.AdminADUserName, admin.AdminADPassword).ChangePassword(user.UserName, txtOldPassword.Text, txtConfirmNewPassword.Text); 
       SetChangePasswordMessage("The password has been successfully changed."); 
      } 
関連する問題