2010-04-21 12 views
13

मैं कुछ उपयोगकर्ता डेटा को एन्क्रिप्ट करने की कोशिश कर रहा हूं ताकि फॉर्म प्रमाणीकरण का उपयोग करके अपना स्वयं का कस्टम आईप्रिनिस्ट्रियल और IIDentity ऑब्जेक्ट्स तैयार किया जा सके - मैंने अपने लॉग इन उपयोगकर्ता को जेसन और निर्मित करने वाले ऑब्जेक्ट को क्रमबद्ध किया है इसलिए तरह मेरे FormsAuthentication टिकट:System.Web.Security.FormsAuthentication.Encrypt वापस शून्य

string user_item = GetJsonOfLoggedinUser();/*get JSON representation of my logged in user*/ 

System.Web.Security.FormsAuthenticationTicket ticket = 
    new System.Web.Security.FormsAuthenticationTicket(1, 
    WAM.Utilities.SessionHelper.LoggedInEmployee.F_NAME + " " 
    + WAM.Utilities.SessionHelper.LoggedInEmployee.L_NAME, 
    DateTime.Now, DateTime.Now.AddMinutes(30), false, user_item); 

string encrypted_ticket = System.Web.Security.FormsAuthentication.Encrypt(ticket); 

HttpCookie auth_cookie = 
    new HttpCookie(System.Web.Security.FormsAuthentication.FormsCookieName,  encrypted_ticket); 

Response.Cookies.Add(auth_cookie); 

हालांकि, स्ट्रिंग encrypted_ticket हमेशा null है। user_item स्ट्रिंग की लंबाई पर कोई सीमा है?

धन्यवाद मुस्तफा

+0

इसके साथ कोई प्रगति? –

+4

मेरे लिए, यदि टिकट पर नाम संपत्ति शून्य है तो एन्क्रिप्ट फ़ंक्शन शून्य हो जाता है। 4KB सीमा कुकी पर लागू होती है न कि एन्क्रिप्टेड मान पर। यदि एन्क्रिप्टेड मान 4KB से बड़ा है, तो कुकी जोड़ने का प्रयास विफल हो जाएगा। – Mayo

+0

मेरे साथ एक ही समस्या है, लेकिन मेरे @Mayo उत्तर के साथ इसे –

उत्तर

8

हाँ, ठेठ कुकी सीमा 4k है ~।

एन्क्रिप्शन जोड़ें और आप नीचे < 2k पर हैं।

आपका कोड सही है .. पर विचार करें:

string user_item = "fsddfdfssdfsfdasdfsf"; 

System.Web.Security.FormsAuthenticationTicket ticket = 
    new System.Web.Security.FormsAuthenticationTicket(1, 
    " sdfasdf asdflasdfasd ", 
    DateTime.Now, DateTime.Now.AddMinutes(30), false, user_item); 

string encrypted_ticket = 
    System.Web.Security.FormsAuthentication.Encrypt(ticket); 

HttpCookie auth_cookie = 
    new HttpCookie(System.Web.Security.FormsAuthentication.FormsCookieName, encrypted_ticket); 

पैदावार:

 
95ED981CFDF6AE506650E2AD01D2B52666AFC4895F0E19F14D82628C3F263EF1DA77F73BFD0284BEDCF815FBFB9AF00AF8875C61D01E27BF53C229F19C7CDE54FBC10AC478FAF02237DDC545AEF32BBA8EED88DBB09D671CD87E685E9FE05908CAE02EB05880DC1D230D67AEB0D7B0F258435D906EBD7F505DCCD738D94532E96363B13DA92060720476619672FEC670 

हालांकि यह मेरा अनुभव है कि फूला हुआ कुकीज़ के रूप में करने का विरोध किया nulled छोटा कर दिया जाता है, तो अपनी समस्या शायद उस JSON शामिल है वे पात्र जो आपकी कुकी को विकृत कर देंगे, इस प्रकार इसे तोड़ देंगे।

सुनिश्चित करें कि आपके json एक उचित आकार है, फिर कोशिश

string user_item = Server.UrlEncode(GetJsonOfLoggedinUser()); 

सुनिश्चित करें कि आप अपने कुकीज़ को मापने और धक्का करने की कोशिश नहीं करते हैं, यह सूक्ष्म और शातिर तरीके से काट लेगी जब आप होना चाहते हैं घर देखकर खोया और टकीला पीना। कोई मज़ा नहीं।

+0

क्या आप खो गए थे क्योंकि आप थे पीने के टकीला? – JJS

26

इस मुद्दे पर एक अतिरिक्त, UserData पैरामीटर है जब के रूप में nullencrypted_ticket भी null हो जाएगा।

इस उदाहरण में:

var ticket = new System.Web.Security.FormsAuthenticationTicket(1, 
     "username", 
     DateTime.Now, DateTime.Now.AddMinutes(30), false, null); 

string encrypted_ticket = System.Web.Security.FormsAuthentication.Encrypt(ticket); 

encrypted_ticket पैदावार अब null। हालांकि उपयोगकर्ता डेटा पैरामीटर के लिए खाली स्ट्रिंग या string.Empty का उपयोग करते समय हमें वैध एन्क्रिप्टेड_टिकेट मिलता है।

यह भी कुछ हद तक पर MSDN

नोट

UserData पैरामीटर प्रलेखित नल नहीं हो सकता है।

+2

विवरण के लिए धन्यवाद - उपयोगकर्ताडाटा शून्य होने पर एक अपवाद फेंक दिया गया था। – Mustafakidd

+0

धन्यवाद आदमी !!!!! – TheGateKeeper

+0

ओएमजी धन्यवाद। मैंने इसे समझने और कहीं भी नहीं मिलने में 2 घंटे बिताए हैं। – coryrwest

1

मैं प्रवेश पृष्ठ से रीडायरेक्ट करने के लिए इस कोड का इस्तेमाल किया पेज deafault.aspx सकता है और मेरे UserData आपकी समस्या की तरह अशक्त था:

FormsAuthentication.RedirectFromLoginPage (उपयोगकर्ता नाम, गलत);

मैं कोड बदलता हूं, इस कोड को login.aspx से डिफ़ॉल्ट पर रीडायरेक्ट करने का प्रयास करें।एएसपीएक्स पृष्ठ और आपका उपयोगकर्ता डेटा ठीक होगा:

Response.Redirect(FormsAuthentication.GetRedirectUrl(UserName, false)); 

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