2009-03-03 10 views
25

पर प्रपत्र प्रमाणीकरण क्या उप-डोमेन में उपयोगकर्ताओं को प्रमाणित करना संभव है जब प्रमाणीकरण मूल डोमेन के बजाय उप-डोमेन पर होता है?सब-डोमेन

उदाहरण के लिए: site1.parent.com में

उपयोगकर्ता लॉग, और फिर हम उन्हें reporting.parent.com को भेजने की जरूरत है।

क्या मैं उन्हें उप-डोमेन में लॉग-इन होने के बावजूद रिपोर्टिंग साइट पर प्रमाणित कर सकता हूं?

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

+0

यहाँ मेरा उत्तर देखें: http://stackoverflow.com/a/14781927/3661 –

उत्तर

10

आप कुकी को प्रमाणीकरण समय पर मूल डोमेन होने के लिए सेट कर सकते हैं लेकिन आपको इसे स्पष्ट रूप से सेट करना होगा, यह आपके द्वारा पूर्ण डोमेन पर डिफ़ॉल्ट होगा।

एक बार ऑथ कुकी सही डोमेन पर सेट हो जाने के बाद, सभी उप-डोमेन इसे पढ़ने में सक्षम होना चाहिए।

4

हाँ, सुनिश्चित करें। आपको कुछ चरणों में अपना खुद का रोल करने की आवश्यकता हो सकती है, लेकिन यह करने योग्य होना चाहिए।

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

29

जब आप उपयोगकर्ता को प्रमाणित करते हैं, तो प्रमाणीकरण कुकी का डोमेन दूसरे-स्तर डोमेन पर सेट करें, यानी parent.com। प्रत्येक उप-डोमेन अनुरोध पर मूल डोमेन की कुकीज़ प्राप्त करेगा, इसलिए प्रत्येक पर प्रमाणीकरण संभव है क्योंकि आपके पास साझा करने के लिए साझा प्रमाणीकरण कुकी होगी।

प्रमाणीकरण कोड:

System.Web.HttpCookie authcookie = System.Web.Security.FormsAuthentication.GetAuthCookie(UserName, False); 
authcookie.Domain = "parent.com"; 
HttpResponse.AppendCookie(authcookie); 
HttpResponse.Redirect(System.Web.Security.FormsAuthentication.GetRedirectUrl(UserName, 
                     False)); 
+1

मैं "FormsAuthentication.SetAuthCookie" का उपयोग कुकी सेट करने के लिए। अंतर क्या है? –

7

एक पक्ष नोट के रूप में, मैंने पाया कि कार्य आरंभ की विधि है जो अच्छी तरह से काम +1, उपयोग करने के बाद FormsAuthenication.SignOut() विधि जब अलावा अन्य किसी उप डोमेन से कहा जाता है काम नहीं किया www /। (मैं क्योंकि .Domain संपत्ति से मेल नहीं खाता अनुमान लगा रहा हूँ) - यह मैं प्रयोग किया जाता के आसपास पाने के लिए:

if (Request.Cookies[FormsAuthentication.FormsCookieName] != null) 
      { 
       HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName); 
       myCookie.Domain = "parent.com"; 
       myCookie.Expires = DateTime.Now.AddDays(-1d); 
       Response.Cookies.Add(myCookie); 
      } 
7

मुख्य डोमेन के लिए कुकी सेट करने के अतिरिक्त भी सुनिश्चित करने की आवश्यकता है कि सभी साइटों (ऐप्स) एक ही सत्यापन हैकी और डिक्रिप्शनकी() ताकि वे सभी एक-दूसरे के प्रमाणीकरण टिकट और कुकी को पहचान सकें। काफ़ी अच्छा लेख यहां http://www.codeproject.com/KB/aspnet/SingleSignon.aspx

3

2 बातें किया जाना:

  1. MachineKey सभी web.config (मुख्य डोमेन और उप डोमेन (ओं))
  2. AuthenticationCookie डोमेन नाम एक ही होना चाहिए में ही होना चाहिए।

अधिक गहराई के लिए following आलेख का पालन करें।

4

जेरो का उत्तर ठीक काम करता है। लेकिन वेब कॉन्फिग फॉर्म प्रमाणीकरण setting "domain" को अपडेट करना सुनिश्चित करें, अन्यथा प्रमाणीकरण साइनआउट फॉर्म ठीक से काम नहीं करेगा। Here साइनआउट मुद्दा है जो मैंने पार किया था। यहाँ एक चाल है '।' चूंकि डोमेन के रूप में उपसर्ग ".parent.com" के रूप में कुकी के लिए सेट किया गया है (एक कुकी इंस्पेक्टर का उपयोग करें)।

<authentication mode="Forms">   
     <forms cookieless="UseCookies" defaultUrl="~/Default" loginUrl="~/user/signin" domain=".parent.com" name="FormAuthentication" path="/"/> 
    </authentication> 
संबंधित मुद्दे