ASP.Net Store Пароль пользователя в файле cookie сеанса? - PullRequest
6 голосов
/ 27 декабря 2011

Я знаю, что провайдер членства сохраняет имя пользователя и срок его действия в зашифрованном файле cookie, а затем использует его для проверки того, что пользователь все еще вошел в систему для сеанса.

Можно ли сохранить пользователейпароль в этом зашифрованном cookie, а также.Если да, то как бы вы получили доступ к нему на стороне сервера?

Мне нужны доступные на стороне сервера имя пользователя и пароль пользователя, потому что мне нужно вызывать веб-службы, использующие те же учетные данные.Есть ли лучший способ сделать это?

Ответы [ 3 ]

10 голосов
/ 27 декабря 2011

Вы должны хранить его в состоянии сеанса, которое никогда не покидает сервер.

Вам также следует попытаться изменить эти веб-службы для использования билетов проверки подлинности вместо паролей (например, OAuth), потому что хранить пароли в виде обычного текста не всегда хорошая идея.

3 голосов
/ 27 декабря 2011

Да, вы можете сделать это.Вы передаете закодированную информацию в поле userData конструктора FormsAuthenticationTicket:

  FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(version,
    name, issueDate, expirationDate, isPersistent, yourEncodedData);
  string secureTicket = FormsAuthentication.Encrypt(ticket);
  Response.Cookies.Add(
      new HttpCookie(FormsAuthentication.FormsCookieName, secureTicket));

В идеале это должно быть сделано через соединение SSL, а cookie билета должен быть отмечен как с помощью атрибутов HttpOnly, так и Secure.

Затем, чтобы получить значение:

FormsIdentity id = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
string yourEncodedInfo = ticket.UserData;

Вы также можете просто установить свой собственный cookie, отдельно от билета проверки подлинности форм.

Однако, сохраняя пароль непосредственно вcookie, даже если он зашифрован, не является хорошей идеей с точки зрения безопасности.Вместо этого используйте состояние сеанса:

Session["password"] = password;

Состояние сеанса также использует файл cookie, но сам файл cookie содержит только ключ.Сервер использует ключ для получения словаря пар ключ / значение, уникальных для этого сеанса, которые остаются на сервере (или сериализуются в БД, в зависимости от того, как он настроен).

2 голосов
/ 27 декабря 2011

Не рекомендуется, но вы можете использовать FormsAuthenticationTicket.UserData .

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