c# - एलडीएपी सेट पासवर्ड वार्ता को अस्वीकार कर दिया गया है



active-directory (1)

यहां उदाहरण दिया गया है: -

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

पासवर्ड बदलने के लिए

user.SetPassword("setPassword");

यदि आप चाहते हैं कि उपयोगकर्ता को अगले लोगोन पर पासवर्ड बदलना चाहिए, तो आप इस तरह से उपयोग कर सकते हैं।

user.ExpirePasswordNow();

आपका पूरा कोड यहां है: -

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;
   }

मुझे यहां एक अच्छा लेख मिला है, यदि आप इसे अपने रास्ते में इस्तेमाल करना चाहते हैं, तो यहां एक नज़र डालें,

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

निम्नलिखित कोड 3 महीने के लिए किसी भी समस्याओं के बिना काम कर रहा था आज से मुझे निम्न त्रुटि मिल रही है; "अपवाद एक आविष्कार के लक्ष्य से फेंक दिया गया है" और आंतरिक अपवाद; "प्रवेश से इनकार किया गया है। (HRESULT से अपवादः 0x80070005 (ई_एसीसीएसीडीएडीआईडी)"

प्रमाणीकरण फ़ंक्शन कार्य करता है ये मेरे कार्य हैं;

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;
    }

और बदलेंपैसेवर्ड विधि;

   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;
    }

जब मैं SetPassword प्रॉपर्टी का आह्वान करता हूं, तो यह एक्सपेसिशन फेंकता है I किसी भी तरह की सहायता का स्वागत किया जाएगा।





active-directory