c# - सी#बदलें एडी पासवर्ड निर्देशिकासर्वर्स




active-directory (3)

काम करने के लिए निम्नलिखित कोड प्राप्त करने की कोशिश कर रहा हूं, समस्या यह है कि कभी-कभी ऐसा होता है, कभी-कभी ऐसा नहीं होता। जब यह विफल हो जाता है तो त्रुटि 0x800704F1 देता है "सिस्टम प्रमाणीकरण अनुरोध सेवा करने के लिए डोमेन नियंत्रक से संपर्क नहीं कर सकता" मैं कह सकता हूं कि समय के बारे में 90% विफल रहता है मैंने इसे एक स्थैतिक डीसी को संदर्भ स्वरूप के पीछे जोड़कर इसे करने की कोशिश की है, यह दुख की बात है कि इसमें मदद नहीं मिली। एक व्यवस्थापक उपयोगकर्ता पर यह हमेशा से काम करता है .. फिर भी मेरा मानना ​​है कि उपयोगकर्ता अपने खुद के पासवर्ड को बदलने में सक्षम होना चाहिए। उपयोगकर्ता के पर त्रुटि शुरू हो गई है

मुझे आशा है कि किसी और के पास एक उज्ज्वल विचार है

        using (var context = new PrincipalContext(ContextType.Domain))
        {
            using (var user = UserPrincipal.Current)
            {
                try
                {
                    user.ChangePassword(txt_old.Text, txt_new.Text);
                    user.Save();

                }
                catch(Exception p)
                {
                    if (p.HResult.Equals("0x800708C5"))//Not secure enough according to password policy
                    {
                        MessageBox.Show("Volgens het systeem is uw nieuwe wachtwoord niet veilig genoeg, voldoet het aan alle eisen?", "Niet gelukt", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    else if (p.HResult.Equals("0x80070056")) //Wrong current password
                    {
                        MessageBox.Show("U heeft een verkeerd huidig wachtwoord ingevult, probeer het nogmaals", "Verkeerd wachtwoord", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    else if (p.InnerException.ToString().Contains("0x80070775")) //Temporarly locked out.
                    {
                        MessageBox.Show("Uw account is tijdelijk vergrendeld door te veel pogingen tot in te loggen met een foutief wachtwoord. Probeer het over 15minuten nogmaals of neem contact op met de helpdesk.", "vergrendeld.", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    else
                    {
                        MessageBox.Show(System.Security.Principal.WindowsIdentity.GetCurrent().Name + Environment.NewLine + p.HResult + Environment.NewLine + p.Message);
                        return;
                    }
                }
            }
        }

आपकी समस्या यह हो सकती है कि पासवर्ड नीति उल्लंघन हुआ है। उदाहरण के लिए, यदि आपके पास एक पासवर्ड नीति है, तो उपयोगकर्ता अपने पिछले 5 में से एक होने के लिए अपना पासवर्ड बदल नहीं सकते हैं, उदाहरण के तौर पर, यदि वे अपने पिछले 5 में से एक को बदलने का प्रयास करते हैं तो आप इसे देखेंगे त्रुटि मेरे अनुभव में फेंक दिया

अपवाद जो आप रिपोर्ट करते हैं (मेरे मामले में) से पहले त्रुटि इस तरह दिखती है: TargetInvocationException: एक सक्रिय निर्देशिका पासवर्ड बदलने का प्रयास करते हुए COM त्रुटि ..

इसलिए मैं आपकी पासवर्ड नीतियों की जांच करता हूं और सुनिश्चित करता हूं कि इन मामलों में आपके उपयोगकर्ता इसका उल्लंघन नहीं कर रहे हैं।


मैंने इसे सिसडमिन पक्ष से दो अलग-अलग अवसरों पर देखा: पासवर्ड प्रबंधन सुविधाओं के साथ दो अनुप्रयोगों को दो ताजा तैनात सर्वरों पर स्थापित किया गया था, जो कि निश्चित रूप से पूरी तरह से समझौता हुआ था; दोनों मामलों में, पासवर्ड परिवर्तित करना एक डोमेन नियंत्रक से संपर्क करने में असमर्थ होने वाले आवेदन के बारे में एक त्रुटि के साथ विफल हुआ (जो वास्तव में वहां मौजूद था और उपलब्ध था)।

एक आवेदन एक बंद-स्रोत विक्रेता-द्वारा प्रदान किया गया था ( साइबरअर्क के विशेषाधिकार सत्र ), जबकि दूसरा ग्राहक में विकसित किया गया था, जहां मैं वर्तमान में काम कर रहा हूं; दूसरे मामले में, मैं कोड को देखने में सक्षम था, जो वास्तव में मूल प्रश्न में इस्तेमाल होने जैसा था।

अफसोस की बात है, वास्तव में कोड तय करना दोनों मामलों में एक विकल्प नहीं था: पहली बार आवेदन के लिए हमें आवेदन विक्रेता को एक बग रिपोर्ट करना पड़ा, जबकि दूसरे के लिए हमें आवेदन पर काम करने वाली आंतरिक विकास टीम को एक बग की रिपोर्ट देनी पड़ी, क्या हम किसी भी मामले में तत्काल सुधार नहीं पा सके। प्रबंधन चाहता था कि दोनों आवेदन अब काम कर रहे हैं , इस तरह हमें अपमानजनक अद्यतनों को दूर करना पड़ा (मुझे पता है, यह बुरा है और कोई समाधान नहीं है बल्कि एक आलसी और खतरनाक समाधान है, और मैंने उन सभी चीजों से बचने की कोशिश की, लेकिन प्रबंधन प्रबंधन है, इसलिए .. मेह)

वैसे भी, मैं इस जवाब के साथ कूद रहा हूँ: मेरे मामले (दोनों मामलों) में KB3177108 और KB3167679 को हटाने के अलावा हमें भी KB3175024 और KB3174644 को हटाना पड़ा; जबकि उन दो अपडेट इंस्टॉल किए गए थे, पासवर्ड परिवर्तन फ़ंक्शन अभी भी काम करने से इनकार कर दिया, पहले दो लोगों को हटाने के बाद भी।

इसलिए, यदि आप एक ऐसी स्थिति में खुद को पाते हैं जहां आप कोड को ठीक नहीं कर सकते हैं, और KB3177108 और KB3167679 को निकाल कर समस्या हल नहीं होती है, तो आप KB3175024 और KB3174644 को हटाने का प्रयास कर सकते हैं।


अद्यतनः 10/12/2016: माइक्रोसॉफ्ट ने इस आलेख को अपडेट कर दिया है: https://support.microsoft.com/en-us/kb/3177108 यहां उन्होंने हमें मूल "फिक्सेस" के द्वारा बनाई गई समस्याएं और केर्बोस और स्वयं सेवा पासवर्ड रीसेट के साथ काम करने की कुछ युक्तियां दी हैं।

11 अक्टूबर 2016 तक, मूल अद्यतनों के कारण समस्याओं को हल करने के लिए माइक्रोसॉफ्ट ने https://technet.microsoft.com/en-us/library/security/ms16-101.aspx से जुड़े पैच को पुनः जारी किया (जिसे आप पढ़ सकते हैं https://support.microsoft.com/en-us/kb/3177108 में यह तथ्य भी शामिल है कि आप स्थानीय खातों पर पासवर्ड बदल नहीं सकते हैं)।

मेरा मानना ​​है कि मेरा जवाब है माइक्रोसॉफ्ट ने हाल ही में खिंचाव किया था ताकि एनटीएलएम का उपयोग अब पासवर्ड बदलने के लिए नहीं किया जा सके।

समाधान # 1 ("हथौड़ा"): कोड चलाने के आपके सर्वर पर इन दोनों या तो इन KB अपडेटों को निकालने का प्रयास करें।

https://support.microsoft.com/en-us/kb/3177108

https://support.microsoft.com/en-us/kb/3167679

जब आप कहते हैं कि आप एक व्यवस्थापक के रूप में पासवर्ड बदल सकते हैं, तो क्या आप इसका मतलब केवल तभी करते हैं जब आपका प्रपत्र एडमिन की मशीन पर चल रहा है? चुनौती है जब आवेदन गैर-व्यवस्थापक की मशीन पर चल रहा है?

मैं अपना कोड लेने में सक्षम था और इसे काम करने के साथ-साथ निम्नलिखित को बदलना भी था:

using (var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "test.user0001"))

तथा

using (var user = UserPrincipal.FindByIdentity(context, IdentityType.UserPrincipalName, "[email protected]"))

इन पंक्तियों में से किसी एक या साथ ही तुम्हारा (वर्तमान उपयोगकर्ता को प्राप्त करने के लिए) का उपयोग करके मैं व्यवस्थापक और गैर-व्यवस्थापक पासवर्ड एक जैसे बदल सकता था। मेरा प्रश्न यह है कि क्या आपकी त्रुटि तब होती है जब आपके पास कोई गैर-व्यवस्थापक मशीन पर चलने वाले फ़ॉर्म ऐप होते हैं।





active-directory