ASP.NET Специальная аутентификация пользователя - PullRequest
1 голос
/ 18 мая 2011

Позвольте мне описать мою ситуацию:

Мы разрабатываем веб-приложение для создания сайтов.

Каждый созданный веб-сайт сохраняется в БД со всей дополнительной информацией.

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

Я хочу создать управление пользователями и аутентификацию для этой системы, ДЛЯ КАЖДОГО ВЕБ-САЙТА.

Идея, с которой я пришел:

Создать в БД Users таблицу, в которой будет столбец WebsiteID.

Что касается аутентификации, я планировал создать несколько ручных функций, чтобы при каждом входе пользователя в систему система создавала cookie на компьютере клиента с WebsiteId и случайный GUID, который будет сохранен в нашей БД для обеспечения безопасности ( если GUID отсутствует, клиент может вручную создать cookie с помощью websiteId и взломать систему).

Вот как я планировал сделать это с классом HttpCookie:

// int websiteId -> the current website id.
// int userId -> the user id from the DB.

HttpCookie cookie = new HttpCookie("WebsiteAuthentication" + websiteId);
cookie.Values["WebsiteId"] = websiteId.ToString();
cookie.Values["UserId"] = userId.ToString();
cookie.Values["Guid"] = "SOME_RANDOM_GUID";

Когда мне нужно будет проверить, аутентифицирован ли текущий пользователь, я сравню куки-файл клиента (если он существует) и GUID куки-файла с GUID-файлом, сохраненным в БД приложений.

Это хороший способ решить мою проблему? Это защищено и достаточно безопасно?

Я буду рад узнать, что вы скажете об этом, может быть, я совершенно не в курсе ...

Надеюсь, мне было понятно. Спасибо всем,

Gal

Ответы [ 2 ]

1 голос
/ 18 мая 2011
  1. Я думаю, что вы должны использовать поставщика членства (вы можете создать собственную реализацию, если вам нужно).

  2. Вы действительноследует использовать FormsAuthentication.SetAuthCookie для создания cookie.

0 голосов
/ 18 мая 2011

Как говорит CD (и я написал в своем комментарии), вы можете использовать Членство, чтобы получить то, что вы хотите.

Но у вас есть проблема с идентификатором приложения, так как идентификатор указан в web.config и, следовательно, глобален для приложения.Это означает, что вы не сможете напрямую обрабатывать различные приложения.

Кажется, что вы можете унаследовать от одного из стандартных поставщиков членства (вероятно, SqlMembershipProvider наиболее близок к вашим потребностям), а из класса наследования вы можете установить ApplicationName, Но вы, конечно, будете сталкиваться с проблемами с многопоточностью, если только вы не заблокируете все операторы после установки имени приложения, и в этом случае у вас будут проблемы с производительностью .

С другой стороны, вы получаете структуру базы данных, пароли, хранящиеся в виде заполненных хэшей, и кучу других рекомендаций по безопасности, предоставленных поставщиком членства, поэтому я все равно рекомендую использовать SqlMembershipProvider;но вам может потребоваться сделать несколько более умных подклассов или в конечном итоге просто реализовать интерфейс и использовать композицию для инициализации поставщика членства для каждого подприложения, где имя приложения установлено правильно.

...