Я хочу защитить отдельные (динамические) страницы в приложении ASP.NET MVC.
Я не хочу использовать полномасштабную систему аутентификации — мы уже используем аутентификацию с помощью форм для администраторов сайта. Вместо этого мы можем рассылать ссылки на страницу с паролем для конкретных пользователей.
В настоящее время я обрабатываю это так: когда отправляется действительный пароль, мы создаем зашифрованный файл cookie, содержащий идентификатор страницы (Guid) и их идентификатор сеанса, и перенаправляем их на страницу. Затем в нашем действии контроллера «Страница» мы проверяем этот файл cookie.
Итак, первый вопрос: является ли это лучшим (наиболее безопасным) подходом (кроме использования проверки подлинности с помощью форм)?
Второй вопрос: могу ли я прочитать машинный ключ, используемый Forms Authentication для выполнения шифрования, или еще лучше использовать FormsAuthentication для шифрования файла cookie (единственная перегрузка, которую я вижу, — это та, которая требует FormsAuthenticationTicket)?
Поскольку мы всегда генерируем новый машинный ключ перед развертыванием, было бы лучше, если бы все наше шифрование использовало один и тот же ключ.
[Обновлять]
Что касается доступа к машинному ключу, я нашел свой ответ по адресу http://rich-rogers.com/archive/asp.net-c-sharp-encrypt-hash-using-machinekey-values
[Обновление 2]
Я понимаю, задав этот вопрос, что, поскольку мне нужно будет вести список страниц, к которым у них есть доступ, мне, вероятно, было бы лучше просто сохранить их в текущем сеансе. Я могу хранить список токенов безопасности с датой истечения срока действия. Поскольку у меня уже есть оболочка вокруг сеанса, это также должно быть легко для модульного тестирования.