2009-09-17 13 views
5

मैं एएसपी.नेट एमवीसी कैशिंग और प्राधिकरण पर उलझन में हूं और कुछ स्पष्टीकरण की सख्त जरूरत है।प्राधिकरण और एएसपी.नेट एमवीसी कैशिंग

मेरी स्वयं निर्मित प्राधिकरण विशेषता AuthorizeAttribute से विरासत में प्राप्त होती है। इसकी ओवरराइड AuthorizeCore विधि हर बार चलती है, भले ही मैं नियंत्रक कार्रवाई पर [OutputCache] विशेषता सेट करता हूं। मैं उस हिस्से को समझता हूँ।

अब मेरे लिए मन Bender: AuthorizeCore हर बार असफल हो जायेगी अब जब मैं वास्तव में उत्पादन कैशिंग करते हैं और पेज कैश से परोसा जाता है। इसका कारण यह है कि जब अनुरोध कैश किया जाता है, httpContext.SessionAuthorizeCore के साथ आपूर्ति null है? यहाँ कुछ सरल कोड है:

protected override bool AuthorizeCore(HttpContextBase httpContext) { 
    return (Session["userId"] != null) 
} 

तो अगर httpContext.Sessionnull है, यह स्पष्ट रूप से हर बार विफल रहता है। हालांकि मुझे सत्र तक पहुंचने की ज़रूरत है, अगर अनुरोध अधिकृत है तो मैं और कैसे जांच सकता हूं? यह कोई समझ नहीं आता है - अगर ऐसा होता है तो यह कभी एएसपी.नेट एमवीसी में प्रमाणीकरण के साथ कैश किए गए पृष्ठों का उपयोग करने में सक्षम हो जाएगा। मदद?

उत्तर

11

वहाँ दो अलग-अलग प्रश्न हैं:

  1. MVC में कैशिंग के साथ प्रमाणीकरण काम करता है?
  2. क्या सत्र कैश के चेहरे में प्रमाणीकरण से पहले काम करता है (यहां तक ​​कि अनधिकृत उपयोगकर्ताओं के लिए भी, जिनके पास अभी भी एक अद्वितीय सत्र है)?

उत्तर, क्रमशः, हाँ और नहीं हैं। प्रमाणीकरण कैशिंग के साथ ठीक काम करता है। इसे SQL या डोमेन सदस्यता प्रदाताओं के साथ आज़माएं; तुम देखोगे।

कैशिंग, प्रमाणीकरण मॉड्यूल से पहले चलाया जा सकता है। (बोनस अंक के लिए: क्यों?) प्रमाणीकरण केवल तभी बुलाया जाता है जब यह विशेष रूप से कैश को हुक करता है (जैसा कि AuthorizeAttribute करता है)। चूंकि सत्र उपयोगकर्ता-विशिष्ट हैं, नहीं गारंटी है कि आपके पास AuthorizeCore के अंदर एक सत्र होगा।

अधिक बोनस अंक: यदि आपने अपने कैश कॉन्फ़िगरेशन में भिन्न यूज़र निर्दिष्ट किया है तो यह कैसे हो सकता है?

दुर्भाग्य से, प्रमाणीकरण सही करना मुश्किल है, क्योंकि किसी भी प्रकार की सुरक्षा सही करना मुश्किल है। माइक्रोसॉफ्ट सदस्यता प्रदाता एपीआई के साथ इसे आसान बनाने की कोशिश करता है। कस्टम प्रमाणीकरण को लागू करते समय I strongly recommend using that। मैं अंतर्निहित प्रदाताओं का उपयोग करने की सलाह देता हूं और जब भी संभव हो उन्हें पुनः लिखने के बजाय उन्हें विस्तारित करता हूं।

एक अन्य बिंदु: एएसपी.NET सत्र प्रदाता और एएसपी.NET सदस्यता प्रदाता पूरी तरह से अलग हैं। विभिन्न सदस्यता उपयोगकर्ता सत्र (!) साझा कर सकते हैं, और, yes, आप इस साइट पर attack कर सकते हैं। यह कभी भी एक सत्र में सुरक्षा-संबंधी जानकारी रखने के लिए सुरक्षित है। सुरक्षा कठिन है।

+0

तो आप कह रहे हैं कि क्या मैं नियमित एएसपीनेट सदस्यता प्रदाता के आधार पर कस्टम सदस्यता प्रदाता का उपयोग करना चाहता हूं, मैं कैशिंग के साथ उपयोगकर्ता प्रमाणीकरण की जांच कर सकता हूं? वह काम क्यों करता है - सदस्यता प्रदाता सत्र की भी आवश्यकता है आंतरिक रूप से नहीं? – Alex

+1

सत्र, पूर्ण रोक में सुरक्षा-संवेदनशील जानकारी रखना कभी सुरक्षित नहीं है। –

+1

और नहीं, नियमित सदस्यता प्रदाता के पास सत्र के साथ कुछ भी करने के करीब नहीं है। मेरे उत्तर में पिछले दो लिंक पढ़ें। –

संबंधित मुद्दे