2011-08-27 14 views
46

FormsAuthentication का उपयोग करते हुए हम इस तरह कोड लिखने:मैं डिफ़ॉल्ट विधि के बजाय मैन्युअल रूप से प्रमाणीकरण कुकी कैसे बना सकता हूं?

if (IsValidUser()) 
{ 
     FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); 
     FormsAuthentication.RedirectFromLoginPage(userName, createPersistentCookie); 
} 
  1. मैं कैसे मैन्युअल रूप से एक प्रमाणीकरण कुकी बजाय लिखने की बना सकते हैं?

  2. मैं FormsAuthentication.RedirectFromLoginPage(userName, createPersistentCookie) लिखने के बजाय एक स्ट्रिंग वैरिएबल में लॉगिन पेज से रीडायरेक्ट यूआरएल कैसे स्टोर कर सकता हूं?

उत्तर

81

यहां आप जाते हैं। जब आप फॉर्म प्रमाणीकरण में बनाए गए उच्च स्तरीय तरीकों का उपयोग करते हैं तो एएसपी.नेट आपके लिए इसका ख्याल रखता है, लेकिन निम्न स्तर पर इसे प्रमाणीकरण कुकी बनाने की आवश्यकता होती है।

if (Membership.ValidateUser(username, password)) 
{ 
    // sometimes used to persist user roles 
    string userData = string.Join("|",GetCustomUserRoles()); 

    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
    1,          // ticket version 
    username,        // authenticated username 
    DateTime.Now,       // issueDate 
    DateTime.Now.AddMinutes(30),   // expiryDate 
    isPersistent,       // true to persist across browser sessions 
    userData,        // can be used to store additional user data 
    FormsAuthentication.FormsCookiePath); // the path for the cookie 

    // Encrypt the ticket using the machine key 
    string encryptedTicket = FormsAuthentication.Encrypt(ticket); 

    // Add the cookie to the request to save it 
    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
    cookie.HttpOnly = true; 
    Response.Cookies.Add(cookie); 

    // Your redirect logic 
    Response.Redirect(FormsAuthentication.GetRedirectUrl(username, isPersistent)); 
} 

मुझे यकीन नहीं है कि आप यहां कुछ कस्टम क्यों करना चाहते हैं। यदि आप उपयोगकर्ता डेटा को संग्रहीत करने के तरीके को कार्यान्वित करना चाहते हैं और उपयोगकर्ता कैसे प्रमाणीकृत करते हैं तो कस्टम MembershipProvider बनाने का सर्वोत्तम अभ्यास है। प्रमाणीकरण कुकी के साथ अपना स्वयं का समाधान और गड़बड़ करना आपके सॉफ़्टवेयर में सुरक्षा छेद पेश करने की उच्च संभावना है।

मुझे आपके भाग को समझ में नहीं आ रहा है 2. आपको केवल फॉर्म्स प्रमाणीकरण.गेट्रैडरेक्ट यूआरएल को कॉल करने की आवश्यकता है यदि आप उन उपयोगकर्ताओं को वापस लौटना चाहते हैं, जिन्हें वे लॉगिन करने के लिए बाउंस करते समय एक्सेस करने का प्रयास कर रहे थे। यदि आप जो कुछ भी यहां चाहते हैं, तो यदि आप चाहें तो कॉन्फ़िगरेशन में संग्रहीत यूआरएल पर रीडायरेक्ट करें।

फॉर्म प्रमाणीकरण कुकी पढ़ने के लिए, आमतौर पर आप AuthenticateRequest ईवेंट को HttpModule या Global.asax में हुक करेंगे और उपयोगकर्ता को IPrinciple संदर्भ सेट अप करेंगे।

protected void Application_AuthenticateRequest(Object sender, EventArgs e) 
{ 
    HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName]; 
    if(authCookie != null) 
    { 
     //Extract the forms authentication cookie 
     FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); 

     // If caching roles in userData field then extract 
     string[] roles = authTicket.UserData.Split(new char[]{'|'}); 

     // Create the IIdentity instance 
     IIdentity id = new FormsIdentity(authTicket); 

     // Create the IPrinciple instance 
     IPrincipal principal = new GenericPrincipal(id, roles); 

     // Set the context user 
     Context.User = principal; 
    } 
} 
+0

उर जवाब मुझे मदद करता है ... यू कर सकते हैं प्रमाणीकरण के बाद प्रमाणीकरण कुकी की सामग्री पढ़ने क्या कोड मैं लिखने की ज़रूरत है। फॉर्म प्रमाणीकरण। SetAuthCookie (उपयोगकर्ता नाम, createPersistentCookie); SetAuthCookie प्रमाणीकरण कुकी बनाते हैं और मुझे सर्वर की ओर से उस कुकी की सामग्री लिखने की आवश्यकता है? क्या आप कृपया मदद कर सकते हैं। thnx। :) – Thomas

+0

क्या हम jquery का उपयोग कर क्लाइंट साइड से फॉर्म प्रमाणीकरण कुकी बना सकते हैं? – Thomas

+3

मैंने यह दिखाने के लिए अपडेट किया है कि आप कुकी को कैसे पढ़ सकते हैं। नहीं, आप इसे क्लाइंट-साइड से सेट नहीं कर सकते क्योंकि यह एक सुरक्षा जोखिम होगा और आप एन्क्रिप्शन निष्पादित करने में सक्षम नहीं होंगे जिसके लिए सर्वर-साइड कुंजी की आवश्यकता होती है। ऑथ कुकी हमेशा एचटीपी होना चाहिए। एकमात्र तरीका एक AJAX अनुरोध करना होगा और कुकी को सर्वर-साइड सेट करने दें, इस मामले में आपको यह सुनिश्चित करना होगा कि आप SSL पर किसी भी प्रमाण पत्र को पार कर रहे हैं। – TheCodeKing

-7

एक कुकी बनाने के अन्य तरीके से,

HttpCookie toolCookie = new HttpCookie("xyz"); 
toolCookie["UserName"] = userName; 
toolCookie["Password"] = StringCipher.Encrypt(password, "#!"); 
toolCookie.Expires = DateTime.Now.AddMinutes(chkRemember.Checked ? 30 : -30); 
Request.Cookies.Add(toolCookie); 

Reference

जाओ मौजूदा कुकी विवरण

HttpCookie user = Request.Cookies["xyz"]; 
if(user != null) 
{ 
    string username = user["UserName"]; 
    string password = user["Password"] != null ? StringCipher.Decrypt(user["Password"], "#!") 
} 

यहाँ Datasecurity एक स्थिर वर्ग है।

एन्क्रिप्ट और डिक्रिप्ट समारोह Encrypt & Decrypt

+10

पासवर्ड को कभी भी कुकी में न रखें। यह सुरक्षित कुकीज़ के पूरे बिंदु को हरा देता है –

+0

क्या आप मुझे उसी – Vijayaraghavan

+0

के लिए इष्टतम समाधान सुझा सकते हैं। क्या आप इस उदाहरण को देख सकते हैं .. http://www.aspsnippets.com/Articles/Implement- याद रखें- मेरा- कार्यक्षमता-using- चेकबॉक्स- ASPNet.aspx – Vijayaraghavan

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

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