2013-02-25 13 views
7

का उचित निर्माण मैं बस दो सर्वर के बीच एक सरल परीक्षण बना रहा हूं। असल में यदि कोई उपयोगकर्ता पहले ही प्रमाणीकृत है, तो मैं उन्हें एप्लिकेशन के बीच पास करने में सक्षम होना चाहता हूं। मैं उन्हें छिपाने के लिएएक क्रॉस-डोमेन फॉर्म प्रमाणीकरण कुकी

मैं तीन प्रश्न हैं कुंजी बदल दिया है:

  1. क्या डोमेन आवेदन भर में कुकी मान्य करने के लिए उचित तरीका है। उदाहरण के लिए, जब उपयोगकर्ता successpage.aspx पर उतरता है तो मुझे किसके लिए जांच करनी चाहिए?
  2. क्या नीचे कोड कोड क्रॉस डोमेन प्रमाणीकरण कुकी बनाने के लिए मान्य है?
  3. क्या मेरे पास web.config सेटअप ठीक से है?

मेरे कोड:

if (authenticated == true) 
{ 
    //FormsAuthentication.SetAuthCookie(userName, false); 
    bool IsPersistent = true; 
    DateTime expirationDate = new DateTime(); 
    if (IsPersistent) 
    expirationDate = DateTime.Now.AddYears(1); 
    else 
    expirationDate = DateTime.Now.AddMinutes(300); 

    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
     1, 
     userAuthName, 
     DateTime.Now, 
     expirationDate, 
     IsPersistent, 
     userAuthName, 
     FormsAuthentication.FormsCookiePath); 

    string eth = FormsAuthentication.Encrypt(ticket); 
    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, eth); 
    if (IsPersistent) 
    cookie.Expires = ticket.Expiration; 

    cookie.Domain = ".myDomain.com"; 
    Response.SetCookie(cookie); 
    Response.Cookies.Add(cookie); 

    Response.Redirect("successpage.aspx"); 
} 

मेरे config:

<authentication mode="Forms"> 
    <forms loginUrl="~/Default.aspx" timeout="2880" name=".AUTHCOOKIE" domain="myDomain.com" cookieless="UseCookies" enableCrossAppRedirects="true"/> 
</authentication> 
<customErrors mode="Off" defaultRedirect="failure.aspx" /> 
<machineKey decryptionKey="@" validationKey="*" validation="SHA1" decryption="AES"/> 

उत्तर

4

क्या डोमेन आवेदन भर में कुकी मान्य करने के लिए उचित तरीका है। उदाहरण के लिए, जब उपयोगकर्ता सफलता पृष्ठ पर आ जाता है .aspx मुझे किसके लिए जांच करनी चाहिए?

जांचने के लिए कुछ भी नहीं होना चाहिए। प्रपत्र प्रमाणीकरण तंत्र कुकी से टिकट पुनर्प्राप्त करेगा, जांचें कि यह मान्य है या नहीं। यदि मौजूद नहीं है, या अमान्य, उपयोगकर्ता ~/default.aspx पर रीडायरेक्ट किया जाएगा। यह काम करेंगे प्रदान की अपने कुकी अपने web.config

नीचे कोड एक क्रॉस डोमेन प्रमाणीकरण कुकी बनाने के लिए मान्य है के विन्यास से मेल खाता है?

मुझे लगता है कि आपको कुकी को मैन्युअल रूप से प्रबंधित करके अपने web.config की सेटिंग्स को ओवरराइड करने का प्रयास नहीं करना चाहिए।

  1. (उदाहरण के लिए एसएसएल के लिए web.config खो) मुझे लगता है कि कुकी हठ (web.config लिए नीचे देखें) से निपटने के लिए बेहतर तरीके हैं और तुम सिर्फ फार्म प्रमाणीकरण एपीआई का एक हिस्सा कार्यान्वित कर रहे हैं यहाँ, अपने मैनुअल कुकी केवल Http नहीं है: आप उदाहरण के लिए कर सकता है कुकी चोरी के अधीन XSS के माध्यम से हो
  2. FormsAuthentication कुकी (http://msdn.microsoft.com/en-us/library/1d3t3c61%28v=vs.80%29.aspx में समय समाप्ति की विशेषता विवरण देखें) आपकी कुकी हठ तंत्र इस स्वत: व्यवहार से ओवरराइट किया जाएगा से निपटने का अपना तरीका होता है

आपका कोड बस होना चाहिए:

if (authenticated) 
{ 
    bool isPersistent = whateverIwant; 
    FormsAuthentication.SetAuthCookie(userName, isPersistent); 
    Response.Redirect("successpage.aspx"); 
} 

मैं अपने web.config सेटअप ठीक है?

यह रूप में लंबे समय आप mydomain.com के प्रत्यक्ष उप डोमेन (यह x.y.mydomain.com लिए काम नहीं करेगा), और mydomain बीच प्रमाणीकरण साझा करना चाहते हैं के रूप में डोमेन विशेषता के लिए ठीक होना चाहिए,।कॉम सार्वजनिक प्रत्यय सूची में नहीं है (http://publicsuffix.org/list/)

मैं टाइमआउट बदल जाएगा और slidingExpiration जिम्मेदार बताते रहे हैं:

<forms loginUrl="~/Default.aspx" timeout="525600" slidingExpiration="false" name=".AUTHCOOKIE" domain="myDomain.com" cookieless="UseCookies" enableCrossAppRedirects="true"/> 

मुझे लगता है कि यह एक वर्ष के लगातार कुकीज़ और सत्र के बीच चुनाव को संभालने के लिए एक अच्छा तरीका है कुकीज़। अधिक जानकारी के लिए https://stackoverflow.com/a/3748723/1236044 देखें

+0

मैंने वी 4.5 वेबसाइट पर वीएस 2013 में अपने फॉर्म प्रमाणीकरण सेट किए हैं और डोमेन को "acme.com" पर सेट किया है। Site1.acme.com तक पहुंचने और प्रमाणीकरण कुकी को सेट करता है लेकिन फ़ायरबग में कुकी डोमेन साइट 1.acme.com के अंतर्गत संग्रहीत होती है, जैसा कि मैंने सोचा था। मुझे लगता है कि ऐसा होगा कि ब्राउजर साइट 1.acme.com और site2.acme.com दोनों के अनुरोधों के साथ ऑथ कुकी भेज देगा और चूंकि मुझे एक ही मशीन कुंजी सेटअप मिल गया है, लेकिन यह काम करना चाहिए, लेकिन यह है निश्चित रूप से मेरे मामले में नहीं हो रहा है। कोई विचार जहां मैं गलत जा रहा हूँ? – Jacques

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