System.Web.Security.FormsAuthentication.Encrypt возвращает ноль - PullRequest
13 голосов
/ 22 апреля 2010

Я пытаюсь зашифровать некоторые 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?

Спасибо, Мустафа

Ответы [ 3 ]

31 голосов
/ 23 мая 2012

В дополнение к этой проблеме, когда параметр 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 не может быть нулевым.

8 голосов
/ 22 апреля 2010

Да, типичный лимит печенья ~ 4k.

Добавьте шифрование и получите <2k. </p>

Ваш код правильный .. учтите:

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

Хотя, по моему опыту, раздутые файлы cookie усекаются, а не обнуляются, ваша проблема, вероятно, состоит в том, что JSON содержит символы, которые делают ваш файл cookie искаженным, тем самым нарушая его.

Убедитесь, что ваш json приемлемого размера, затем попробуйте

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

Убедитесь, что вы измеряете свои куки и не пытайтесь их надавить, они будут кусаться тонкими и злобными способами, когда вы хотите быть дома, наблюдая за Потерянной и пьющей текилу. без веселья.

1 голос
/ 30 декабря 2012

Я использовал этот код для перенаправления со страницы входа в систему на страницу deafault.aspx, и мои UserData были пустыми, как ваша проблема:

FormsAuthentication.RedirectFromLoginPage (имя пользователя, false);

я изменяюкод, попробуйте этот код, чтобы перенаправить со страницы Login.aspx на страницу Default.aspx, и ваши пользовательские данные будут в порядке:

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

....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...