Когда выполняется маршрутизация в конвейере?

#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)