Я занимаюсь разработкой веб-сайта ASP.NET для небольшого бизнеса. Сайт нуждается в защищенной паролем области, где владелец сайта будет управлять контентом сайта. Для остального мира сайт полностью доступен только для чтения.
Я разработал и реализовал следующую схему:
- Пользователь хочет получить доступ к защищенной странице.
- Каждая защищенная страница наследует главную страницу «AdminIface», которая изменяет пользовательский интерфейс, чтобы пользователь знал, что он находится на защищенной странице, и проверяет файл cookie безопасности. Если нет cookie или неправильный cookie: перенаправьте на auth.aspx.
- Auth.aspx генерирует большое случайное число с помощью RNGCryptoServiceProvider, а затем отправляет его клиенту + форма пароля.
- Пользователь вводит пароль.
- Клиентский JavaScript объединяет случайное начальное число + пароль, вычисляет MD5 полученной строки и отправляет MD5 на сервер.
- Сервер сравнивает случайное начальное число со значением, удерживаемым сеансом, если все в порядке, он комбинирует случайное начальное число + пароль, вычисляет MD5, сравнивает MD5.
- Если контрольная сумма совпадает - сервер генерирует еще одно большое случайное число, которое будет использоваться в качестве файла cookie безопасности.
- Сервер сохраняет cookie-файл безопасности в объекте Session и отправляет cookie клиенту, который теперь считается авторизованным.
Правильный пароль хранится в виде строковой константы в источнике auth.aspx.
Эта схема в порядке?
P.S. Я знаю, что AD + Kerberos намного лучше, но на общем хостинге Godaddy у меня нет никаких привилегий даже на создание еще одного приложения.