2012-10-01 4 views
7

następujący kod działał przez 3 miesiące bez żadnych problemów. Od dzisiaj otrzymuję następujący błąd; "Wyjątek został zgłoszony przez cel wywołania" i wewnętrzny wyjątek; . "Odmowa dostępu (wyjątek od HRESULT: 0x80070005 (E_ACCESSDENIED)"Dostęp do SetPassword LDAP jest zabroniony

Funkcja uwierzytelniania działa Oto moje funkcje;

public bool Authenticate(string strUserName, string strPassword) 
    { 
     bool authenticated = false; 
     using (
       var entry = new DirectoryEntry("LDAP://myldapserver", strUserName + "@domain", strPassword, 
               AuthenticationTypes.Secure)) 
     { 
      try 
      { 
       object nativeObject = entry.NativeObject; 
       authenticated = true; 
      } 
      catch (DirectoryServicesCOMException ex) 
      { 
       return false; 
      } 

     } 
     return authenticated; 
    } 

i metoda ChangePassword;

public bool ChangePassword(string strUserName, string strOldPassword, string strNewPassword) 
    { 
     const long ADS_OPTION_PASSWORD_PORTNUMBER = 6; 
     const long ADS_OPTION_PASSWORD_METHOD = 7; 
     const int ADS_PASSWORD_ENCODE_REQUIRE_SSL = 0; 
     const int ADS_PASSWORD_ENCODE_CLEAR = 1; 
     string strPort = "636"; 
     int intPort; 
     intPort = Int32.Parse(strPort); 

     try 
     { 
      string strUserString = "domain" + @"\" + strUserName.Trim(); 

      var entry = new DirectoryEntry("LDAP://myldapserver", strUserString, strOldPassword, 
              AuthenticationTypes.Secure); 
      var search = new DirectorySearcher(entry); 
      string strFilter = "(SAMAccountName=" + strUserName + ")"; 
      search.Filter = strFilter; 
      SearchResult result = search.FindOne(); 
      DirectoryEntry user = result.GetDirectoryEntry(); 

      user.Invoke("SetOption", new object[] { ADS_OPTION_PASSWORD_PORTNUMBER, intPort }); 
      user.Invoke("SetOption", new object[] { ADS_OPTION_PASSWORD_METHOD, ADS_PASSWORD_ENCODE_CLEAR }); 
      **user.Invoke("SetPassword", new object[] { strNewPassword });** 
      user.CommitChanges(); 
      user.Close(); 
     } 

     catch (Exception exception) 
     { 
      string msg = exception.InnerException.Message; 
      return false; 
     } 
     return true; 
    } 

To zgłasza expcetion po wywołaniu właściwości SetPassword Każda pomoc byłaby bardzo doceniana

+0

Która linia zawodzi? Jaka metoda zawodzi? –

+1

ChangePassword to błąd, który kończy się niepowodzeniem na linii user.Invoke ("SetPassword", new object [] {strNewPassword}); – user1595357

+0

Wiadomość umieszczona u góry jest wewnętrznym wyjątkiem? Pytam, ponieważ wyjątek wewnętrzny zawiera rzeczywisty otrzymany wyjątek COM. –

Odpowiedz

1

Tutaj jest th Przykład E: -

PrincipalContext pr = new PrincipalContext(ContextType.Domain, "corp.local", "OU=" + OU + ",OU=Users,dc=corp,dc=local", username, password); 
UserPrincipal us = new UserPrincipal(pr); 

Aby zmienić hasło

user.SetPassword("setPassword"); 

Jeśli chcesz, aby użytkownik powinien zmienić hasło przy następnym logowaniu, można użyć takiego.

user.ExpirePasswordNow(); 

Oto twój pełny kod: -

public static Boolean ResetPassword(string username, string password, string DomainId, string setpassword, Boolean UnlockAccount,Boolean NextLogon) 
{ 
    PrincipalContext pr = new PrincipalContext(ContextType.Domain, "corp.local", "dc=corp,dc=local", username, password); 
    UserPrincipal user = UserPrincipal.FindByIdentity(pr, DomainId); 

    Boolean flag = false; 
    if (user != null && user.Enabled == true) 
    { 
     if (UnlockAccount) 
     { 
      user.UnlockAccount(); 
     } 
     user.SetPassword(setpassword); 
     if (NextLogon) 
     { 
      user.ExpirePasswordNow(); 
     } 
     user.Save(); 
     flag = true; 
    } 
    else 
     { 
     flag = false; 
     } 
    user.Dispose(); 
    pr.Dispose(); 
    return flag; 
    } 

znalazłem dobry artykuł tutaj, jeśli chcesz używać go w sposób, zajrzyj tutaj

http://www.primaryobjects.com/cms/article66.aspx

+0

Dziękuję, życzę panu – user1595357

+0

Czy to zadziałało dla Ciebie? – RL89

+0

Próbuję sprawić, że to zadziała, opublikuje wyniki – user1595357