2011-02-11 15 views
14

मेरे पास एक डोमेन http://abc.com और एक सबडोमेन http://sub.abc.com है। मैं प्रपत्र प्रमाणीकरण कुकी साझा करके दोनों साइटों के बीच एकल साइन-ऑन लागू कर रहा हूं। यह दोनों साइटों को वैधता साझा करने के द्वारा कार्यान्वित किया जाता है और मशीन में डिक्रिप्शनकी।एकल प्रमाणीकरण के लिए प्रपत्र प्रमाणीकरण ReturnUrl और सबडोमेन

जब उपयोगकर्ता उप डोमेन में एक पृष्ठ हिट करता है तो मैं चाहता हूं कि उपयोगकर्ता रूट डोमेन में प्रमाणित हो और सबडोमेन पर वापस रीडायरेक्ट हो। उपयोगकर्ता को वर्तमान में लॉगिन पेज पर रीडायरेक्ट किया गया है लेकिन ReturnUrl रूट साइट पर रीडायरेक्ट करना चाहता है।

उदा। वर्तमान में: http://abc.com/login.aspx?ReturnUrl=%2fsecure%2fdefault.aspx

लेकिन मैं चाहता हूँ: http://abc.com/login.aspx?ReturnUrl=http:%2f%2fsub.abc.com%2fsecure%2fdefault.aspx

यह कैसे प्राप्त किया जा सकता?

<authentication mode="Forms"> 
    <forms name=".ASPNET" loginUrl="http://abc.com/login.aspx" protection="All" timeout="1440" path="/" domain="abc.com" enableCrossAppRedirects="true" /> 
</authentication> 
+0

यदि आप sub.abc.com पर पहुंचने के लिए abc.com से कुकीज़ चाहते हैं, तो मुझे विश्वास है कि आपको डोमेन को "abc.com" के बजाय ".abc.com" पर सेट करने की आवश्यकता होगी। हालांकि वापसी की बात के बारे में निश्चित नहीं है। UrlReferer की जांच करके आपको इसे मैन्युअल रूप से करना पड़ सकता है। –

+0

आपको डोमेन के लिए * .abc.com जैसे वाइल्डकार्ड की आवश्यकता नहीं होगी? – Gallen

+0

@Daniel Schaffer, क्या मुझे दोनों साइटों की कॉन्फ़िगरेशन में ".abc.com" सेट करने की आवश्यकता होगी? या सिर्फ सबडोमेन है? कुकीज़ के साथ – LordHits

उत्तर

14

पर एक नजर डालें मैं इस हल को देखो मेरे एस से मेरे फॉर्म तत्व में एक क्वेरीस्ट्रिंग सेट करके ubdomain:

<authentication mode="Forms"> 
    <forms name=".ASPNET" loginUrl="http://abc.com/login.aspx?returnsite=sub" protection="All" timeout="1440" path="/" domain="abc.com" enableCrossAppRedirects="true" /> 
</authentication> 

फिर मेरी मुख्य वेबसाइट में मेरे ऑथ कोड में, मैं उस क्वेरीस्ट्रिंग की जांच करता हूं। यदि यह मौजूद है तो मैं अपने सबडोमेन को रिटर्नुरल में जोड़कर रीडायरेक्ट यूआरएल का निर्माण करता हूं।

वह रिटर्नसाइट क्वेरीस्ट्रिंग वास्तव में केवल ध्वज के रूप में कार्य कर रही है जिसे मुझे किसी ज्ञात सबडोमेन पर रीडायरेक्ट करने की आवश्यकता है, अन्यथा यह केवल मौजूदा डोमेन पर रीडायरेक्टल के साथ काम करेगा। यह (सिद्धांत रूप में) क्रॉस साइट स्क्रिप्टिंग को रोकना चाहिए।

+0

मुझे यह अन्य समाधानों से बेहतर पसंद है क्योंकि यह किसी अनधिकृत स्थान पर रीडायरेक्ट करने की सामान्य विधि का खुलासा नहीं करता है जो फ़िशिंग हमलों के लिए एक प्रमुख उपकरण है। –

1

आप एक क्वेरी स्ट्रिंग पैरामीटर में के बजाय एक कुकी में एक प्रमाणीकरण टिकट पारित करके इस समस्या को हल कर सकते हैं:

मेरी उप डोमेन के web.config में मैं प्रमाणन इस वर्तमान की तरह कॉन्फ़िगर किया है। This may help you

अद्यतन
अब इस लिंक http://www.developer-corner.com/development/dotnet/single-sign-on-across-multiple-asp-net-applications/


अद्यतन
तुम भी FormsAuthentication.GetRedirectUrl विधि

+0

यह थोड़ा गन्दा लगता है। यदि कुकी का मूल्य वहां है तो क्वेरीस्ट्रिंग बहुत लंबा हो सकता है। मेरी समस्या वास्तव में कुकी नहीं है हालांकि मैं डोमेन के बीच साझा करने में कामयाब रहा हूं।यह सही होने के लिए ReturnURL क्वेरीस्ट्रिंग प्राप्त करने के बारे में है। – LordHits

+1

ठीक है अब यह लिंक देखें http://www.developer-corner.com/development/dotnet/single-sign-on-across-multiple-asp-net-applications/ – Student

+0

जो सिंगल साइन ऑन पर एक अच्छा पठन है लेकिन यह नहीं करता है ReturnURL के संबंध में मेरे प्रश्न का उत्तर नहीं देते हैं। – LordHits

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