Аутентификация пользователя без состояния сеанса в ASP.NET - PullRequest
7 голосов
/ 04 апреля 2009

Одним из требований, предложенных для приложения ASP.NET, является то, что у нас отключено состояние сеанса глобально. (Это не подлежит обсуждению.)

Другое требование заключается в том, что у нас есть некоторые средства для аутентификации пользователей. Я думаю об использовании модели провайдера членства ASP.NET.

Возможно ли иметь аутентификацию пользователя без состояния сеанса?

Вот конкретные примеры аутентификации пользователей, которые мы ищем:

  • Пользователь заходит на сайт без проверки подлинности
  • Пользователь вводит регистрационную информацию (поля контактов и т. Д.)
  • В течение оставшейся части сеанса пользователь имеет доступ к определенному контенту благодаря своему зарегистрированному статусу

Есть ли способ сделать это с помощью файлов cookie?

Можно ли сделать это безопасно, чтобы cookie-файл не мог быть легко подделан?

Есть ли в ASP.NET встроенная функциональность для поддержки этого или нам нужно будет применить наш собственный метод?

Ответы [ 3 ]

12 голосов
/ 04 апреля 2009

Аутентификация ASP.NET Forms не использует SessionState. Он использует куки для хранения билета аутентификации.

Вы также можете принудительно отправлять билет аутентификации по каналу SSL, редактируя файл web.config.

Все необходимые функции доступны в ASP.NET.

http://msdn.microsoft.com/en-us/library/aa480476.aspx

2 голосов
/ 04 апреля 2009

Конечно, cookie сделает это.

Подумайте об основах. В любом случае состояние сеанса управляется файлами cookie.

Вот что вы делаете.

Когда они входят в систему, вы берете их ИД пользователя и время ожидания (таким образом, вход в систему длится, скажем, 30 минут или что-то еще).

Возьми эту строку и хэшируй.

(Java, не важно)

String cookie = userid + ":" + timeString + ":" + md5(userid + ":" + timeString + ":" + "secretpassword");

Затем, когда запрос попадает на ваш сайт, проверьте cookie. Сначала проверьте его на целостность.

String parts[] = cookie.split(":");
String newHash = md5(parts[0] + ":" + parts[1] + ":" + "secret password");
if (!newHash.equals(parts[2])) {
    // boom, cheater!
}

Затем проверьте строку времени, чтобы убедиться, что они все еще "вошли в систему", и перейдите оттуда.

Убедитесь, что у вас есть время, чтобы обновлять куки при каждом запросе.

0 голосов
/ 04 апреля 2009

Да, вы можете использовать куки.

Проблема с файлами cookie заключается в том, что вы не можете сохранить для них много данных. Для регистрации типа мастера я сохраняю данные в базе данных, а затем сохраняю ключ строки / Id в зашифрованном cookie. Таким образом, когда пользователь переходит к следующему шагу, вы можете извлечь данные из базы данных.

Для файлов cookie вы можете отметить и зашифровать значения файлов cookie. Я обычно не управляю состоянием аутентификации пользователя. Я использую встроенные классы FormsAuthentication для управления этим аспектом моих веб-приложений.

Крупные сайты, такие как: Myspace и Live Search Club, полагаются исключительно на файлы cookie в качестве управления состоянием.

...