System.Web.Security.FormsAuthentication.Encrypt возвращает null
Я пытаюсь зашифровать некоторые userData для создания своих собственных объектов IPrincipal и IIdentity с использованием проверки подлинности с помощью форм. Я сериализую объект, представляющий зарегистрированного пользователя в Json, и создал свой билет FormsAuthentication следующим образом:
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
?
Спасибо
Мустафа
Ответы
Ответ 1
Да, типичный предел файлов cookie ~ 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
Хотя мой опыт заключается в том, что раздутые куки файлы усекаются, а не нулевые, ваша проблема, вероятно, заключается в том, что JSON содержит символы, которые сделают ваш файл cookie искаженным, тем самым сломав его.
Убедитесь, что ваш json имеет разумный размер, а затем попробуйте
string user_item = Server.UrlEncode(GetJsonOfLoggedinUser());
Удостоверьтесь, что вы измеряете свои файлы cookie и не пытаетесь его подтолкнуть, он будет укусить тонким и порочным способом, когда вы захотите быть дома, смотря на потерянную и пьющую текилу. нет удовольствия.
Ответ 2
В качестве дополнения к этой проблеме, когда параметр userData null
, encrypted_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
для параметра userData мы получаем действительный encrypted_ticket.
Это также несколько документировано на MSDN
Примечание
Параметр userData не может быть нулевым.
Ответ 3
я использовал этот код для перенаправления с страницы входа на страницу deafault.aspx, а мои UserData были нулевыми, как ваша проблема:
FormsAuthentication.RedirectFromLoginPage(имя пользователя, ложь);
Я меняю код, попробуйте этот код перенаправить с Login.aspx на страницу Default.aspx, и ваши Пользовательские данные будут в порядке:
Response.Redirect(FormsAuthentication.GetRedirectUrl(UserName, false));
....