2008-12-10 7 views
6

मुझे अपने वर्तमान स्कीमा के साथ फिट करने के लिए अपने वर्तमान एएसपी .Net प्रोजेक्ट के लिए कस्टम सदस्यता प्रदाता बनाना पड़ा है, और इसे लॉकआउट में कॉन्फ़िगर करने में समस्याएं आ रही हैं एक उपयोगकर्ता यदि वे मानक प्रदाताओं द्वारा समर्थित तीन बार गलत पासवर्ड प्राप्त करते हैं।किसी उपयोगकर्ता को एएसपी में लॉक करना .NET कस्टम सदस्यता प्रदाता

क्या यह मुझे कुछ लागू करने की ज़रूरत है, या इसे मूल रूप से समर्थित किया जाना चाहिए?

मेरे पास कोई कोड नहीं है जो विशेष रूप से इसके साथ सौदा करता है (और इंटरफ़ेस सदस्यों में से कोई भी विशेष रूप से इसका सामना नहीं कर रहा है), लेकिन अगर मुझे इसे स्वयं लागू करने की आवश्यकता है, तो मैं उपयोगकर्ता को सूचित करने के बारे में कैसे जाउंगा? क्या मुझे ValidateUser में किसी प्रकार का अपवाद उठाने की ज़रूरत है?

समाधान

शर्म की बात है मैं दो जवाब चिह्नित नहीं कर सकते, डेव आर द्वारा प्रदान की लिंक कैसे सदस्यता काम करता है पर गहन अवलोकन के लिए एक महान देते हैं, और क्या Zhaph ने बताया बस मैं क्या कर समाप्त हो गया था, कस्टम सदस्यता प्रदाता में लॉक आउट लॉजिक को संभालना।

मैंने लॉगिन नियंत्रण के लॉगिन एरर ईवेंट का उपयोग करके त्रुटि स्थिति को संभाला और यह देखने के लिए वहां जांच की कि उचित त्रुटि संदेश दिखाने के लिए उपयोगकर्ता को लॉक किया गया था या नहीं।

उत्तर

7

स्कॉट मिशेल ने एएसपी.नेट साइट पर ट्यूटोरियल की एक उत्कृष्ट श्रृंखला लिखी है। इस कड़ी में एक कस्टम प्रदाता बनाने के बारे में जानकारी भी शामिल है और ताला तर्क की चर्चा:

http://www.asp.net/LEARN/security/tutorial-06-cs.aspx

वहाँ भी खातों (अनलॉक करने के लिए कोई में निर्मित विधि है यानी आप आप कुछ उपयोग कर रहे हैं डेटाबेस उपकरण के माध्यम से ऐसा करने के लिए है SqlMembershipProvider के समान)। स्कॉट भी एक यूआई बनाने यह प्रबंधन करने के लिए, आप यहां पा सकते हैं जिसके बारे में एक लेख लिखा है:

http://www.asp.net/LEARN/security/tutorial-14-vb.aspx

मैं वास्तव में पूरी श्रृंखला को पढ़ने की सलाह। स्कॉट एक उत्कृष्ट संवाददाता है।

मुझे उम्मीद है कि इससे मदद मिलती है।

+0

वह पहला लिंक बहुत उपयोगी दिखता है - धन्यवाद! –

0

अपने कस्टम सदस्यता प्रदाता में, आपको ValidateUser फ़ंक्शन को लागू करना चाहिए। वहां आप न केवल यह जांचते हैं कि उपयोगकर्ता नाम और पासवर्ड मान्य हैं या नहीं, लेकिन आप अपने डेटास्टोर से अमान्य पासवर्ड प्रयासों की संख्या भी पुनर्प्राप्त करते हैं। यदि उपयोगकर्ता नाम/पासवर्ड मान्य है, तो पासवर्ड प्रयास गिनती को रीसेट करें, प्रयास प्रयास गिनती बढ़ाएं। SqlMembershipProvider LastAttempt डेटाटाइम को भी संग्रहीत करता है, इसलिए आप किसी भी समय सीमा के भीतर प्रयास करने की अनुमति नहीं देते हैं, इसलिए आप इस तरह से मजबूर नहीं कर सकते हैं।

3

यह ऐसा कुछ है जिसे आपको स्वयं लिखना होगा।

डिफ़ॉल्ट डेटाबेस स्कीमा aspnet_Membership तालिका में निम्न स्तंभ है:

IsLockedOut 
FailedPasswordAttemptCount 
FailedPasswordAttemptWindowStart 

प्रयास गिनती प्रयास खिड़की के भीतर हर असफल प्रयास पर वृद्धि की जाएगी, और पहले असफल प्रयास के समय में संग्रहीत किया जाता है विंडो प्रारंभ कॉलम, एक बार विफलपैसवर्डAttemptCount कॉन्फ़िगरेशन से maxInvalidPasswordAttempts के बराबर है, IsLockedOut सेट है।

Michiel में कहा गया है के रूप में, अपने ValidateUser विधि तो प्रदाता विन्यास में सेटिंग के आधार पर इन मूल्यों की जाँच करने की आवश्यकता होगी - डिफ़ॉल्ट रूप से ये हैं:

maxInvalidPasswordAttempts="5" 
passwordAttemptWindow="10" 

एक बार जब उपयोगकर्ता अधिकतम लॉगिन प्रयास किया गया है आप, आपको यह सुनिश्चित करने की आवश्यकता होगी कि आपने सदस्यता यूज़र सेट किया है। ILLockedOut आपके प्रदाता से सेट है - फिर आप उस मान को जांच सकते हैं और उचित तरीके से व्यवहार कर सकते हैं - यदि आप डिफ़ॉल्ट लॉगिन नियंत्रण का उपयोग कर रहे हैं, तो यह मान शायद आपके लिए पहले से ही चेक किया जाएगा।

2

लॉकआउट (बहुत खराब लॉगिन प्रयास) की स्थिति को दोहराएं। क्योंकि सदस्यता प्रदाता हर बार अपने बैकएंड की यात्रा करते हैं, इसलिए मैक्सइनवालिड पासवर्डवर्ड प्रयासों की उचित संख्या वाले प्रदाताओं को इस दृष्टिकोण को सीमित करना समझदारी है।

if (0 < Membership.MaxInvalidPasswordAttempts && Membership.MaxInvalidPasswordAttempts < 100) 
     { 
       for(int i = 0; i <= Membership.MaxInvalidPasswordAttempts; i++) 
       { 
        Membership.ValidateUser(userName, "jfdlsjflksjlkfjsdlkfjsdl"); 
       } 
     } 
संबंधित मुद्दे