Реализация постоянного входа в систему в приложении ASP.NET MVC - PullRequest
2 голосов
/ 25 января 2011

Я хочу реализовать тип аутентификации, который объясняется здесь в приложении ASP.NET MVC.http://jaspan.com/improved_persistent_login_cookie_best_practice

В моей текущей реализации есть таблицы Users и UserLoginTokens:

CREATE TABLE [Users].[Users]
(
Id              int             NOT NULL, 
UserName        nvarchar(30)    NULL,   -- Not unique. Login by Email.
Email           nvarchar(100)   NOT NULL, 
PasswordHash    nvarchar(512)   NOT NULL,
PasswordSalt    nvarchar(512)   NOT NULL,
)
CREATE TABLE [Users].[UserLoginTokens]
(
Id          int             NOT NULL,
UserId      int             NOT NULL,
Token       varchar(16)     NOT NULL,
Series      varchar(16)     NOT NULL,
)

После входа в систему пользователь выпустил файл cookie пользователя с содержимым: t=@Token&s=@Series.

Теперь у меня есть PersistentLoginModule, который ищет этот файл cookie при каждом запросе, проверяет, что токен и серия действительны, собирают пользователя из него.

Мои вопросы:

  1. Для реализации этого целесообразно ли реализовать собственный модуль аутентификации и вообще не использовать FormsAuthentication?

  2. Должен ли я проверить токен поБД в каждом запросе?

  3. Когда мне следует отказаться от старого токена и выдать пользователю новый?

  4. Относительно реализации БДЕсли я правильно понимаю, серия всегда одинакова для данного пользователя.Если это так, может быть, я должен переместить его в таблицу пользователей?

Спасибо, любая помощь будет очень признателен!

1 Ответ

1 голос
/ 08 августа 2011

Если вы собираетесь создать свой собственный модуль аутентификации, я бы по-прежнему рекомендовал использовать билет FormsAuthentication.

Класс FormsAuthenticationTicket имеет свойство UserData, котороеВы можете использовать для хранения дополнительных данных.

Вы можете использовать статические FormsAuthentication.Encrypt (ticket) и FormsAuthentication.Decrypt (ticket) методы для хранения и получениянабор данных в файле cookie.

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

Вы должны определенно провести свое исследование на лучшеепрактики и аутентификация взлома.Статья, на которую вы ссылаетесь, относится к 2006 году. С тех пор в веб-безопасности произошли многочисленные изменения.

Проверьте исходный код FormsAuthenticationModule, чтобы увидеть, как работает реализация Microsoft (используя что-то вроде отражателя).Вы также должны убедиться, что это исправление KB установлено http://support.microsoft.com/kb/2416472

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