#asp.net-mvc #asp.net-mvc-3 #asp.net-mvc-routing #pipeline
#asp.net-mvc #asp.net-mvc-3 #asp.net-mvc-routing #конвейер
Вопрос:
Когда выполняется маршрутизация в ASP.NET Конвейер MVC?
ASP.NET Обзор жизненного цикла приложения для IIS 7.0
Выполняется ли это на шаге номер 2 (Выполнить сопоставление URL)?
Я намерен создать несколько маршрутов с идентификатором
«активировать/{id}»
«forgotpassword/{id}»
Я хотел бы иметь возможность получить доступ к идентификатору на ранней стадии в pipline на шаге 4 — AuthenticateRequest. Чтобы я мог передать токен аутентификации через идентификационную часть URL-адреса в мой пользовательский модуль аутентификации.
Итак, могу ли я получить доступ к свойству id в моем пользовательском модуле аутентификации или мне нужно вручную извлечь его из URL-адреса запроса?
Спасибо за вашу помощь,
Дункан
Ответ №1:
Похоже, что маршрутизация URL выполняется на шаге номер 9 — PostResolveRequestCache.
Таким образом, это действительно происходит после AuthenticateRequest, который является шагом номер 4.
Это документ для UrlRoutingModule
Я посмотрел его метод Init () в reflector, и именно там он подписывается на событие PostResolveRequestCache.
Итак, я думаю, теперь мне нужно попытаться написать какой-нибудь код, который элегантно извлекает токен из URL вручную..
Ответ №2:
Я знаю, что это не тот ответ, который вы хотите, но с точки зрения безопасности токены в uri — плохая идея. Они могут быть прочитаны javascript и затем отправлены на любой другой сайт в мире.
Однако, отвечая на ваш вопрос, маршрутизация — это httpmodule, поэтому она выполняется очень рано, но происходит после вашей аутентификации. смотрите: http://msdn.microsoft.com/en-us/magazine/dd347546.aspx#id0070044
Комментарии:
1. Ну, я не уверен, что согласен с вашим первым пунктом. Для начала токен будет зашифрован. Во-вторых, я намерен использовать этот метод аутентификации только для страниц активации учетной записи и сброса пароля, чтобы я мог отправить пользователю по электронной почте ссылку, которая позволит им войти в систему. В противном случае вся аутентификация будет выполняться с использованием файлов cookie. Также это стандартный способ, который используют почти все веб-сайты для этих задач администрирования учетных записей.
2. Как человек, который проводит аудит безопасности, я должен не согласиться с тем, что токены в uri являются стандартными. Токены в URL-адресе не рекомендуются — поиск в сети — это обычная рекомендация по безопасности. Конечно, это зависит от вашей реализации. Шифрование означает намного меньше в некоторых системах с уязвимостью POET, когда машинный ключ может быть определен удаленно.
3. также… В вашем первоначальном сообщении у меня не было той части информации, что это было только для сброса настроек и т.д. В отличие от идентификации сеанса и другой аутентификации. В вашем случае убедитесь, что токен используется одноразово.
4. Конечно — weblogs.asp.net/scottgu/archive/2010/09/18 /… и weblogs.asp.net/scottgu/archive/2010/09/28 / … должен предоставить вам основные сведения и ссылку на исправление (которое сейчас находится в центре обновления Windows)
5. Вы хотите создать свой токен один раз — я бы не стал делать этот токен токеном авторизации в формах, поскольку он наверняка может быть атакован, скажем, в течение одного часа, даже если пользователь выйдет из системы. Если вы отправляете электронное письмо, я бы включил этот уникальный идентификатор в вашу базу данных, и как только он будет проверен, срок его действия истечет в вашей базе данных, чтобы в следующий раз, когда кто-то попытается его использовать, они получили сообщение, что срок действия истекает, и они должны снова запросить новый пароль и т.д. Помните, что вы можете просто войти в систему пользователя — вам, вероятно, не нужно дублировать какой-либо из этих классов — с помощью чего-то простого, такого как FormsAuthentication. RedirectFromLoginPage(имя пользователя, false)