【问题标题】:When does routing take place in the pipeline?何时在管道中进行路由?
【发布时间】:2014-03-30 18:14:52
【问题描述】:

路由何时在 ASP.NET MVC 管道中发生?

ASP.NET Application Life Cycle Overview for IIS 7.0

是否在第 2 步(执行 URL 映射)?

我打算有一些具有 id 的路线

“激活/{id}”

“忘记密码/{id}”

我希望能够在第 4 步 - AuthenticateRequest 的管道中尽早访问该 ID。这样我就可以通过 url 的 id 部分将身份验证令牌传递给我的自定义身份验证模块。

那么我可以访问自定义身份验证模块中的 id 属性,还是必须手动从请求 url 中提取它?

感谢您的帮助,

邓肯

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing pipeline


    【解决方案1】:

    似乎 UrlRouting 发生在第 9 步 - PostResolveRequestCache。

    所以它确实发生在 AuthenticateRequest 之后,即第 4 步。

    这是document for UrlRoutingModule

    我在反射器中查找了它的 Init() 方法,这就是它订阅 PostResolveRequestCache 事件的地方。

    所以我想现在我必须尝试编写一些代码来优雅地手动从 url 中提取令牌..

    【讨论】:

      【解决方案2】:

      我知道这不是您想要的答案 - 但从安全角度来看,uri 中的令牌是个坏主意。它们可以通过 javascript 读取,然后发送到世界上的任何其他站点。

      不过,要回答您的问题,路由是一个 httpmodule,因此它发生得非常早,但发生在您的身份验证之后。见:http://msdn.microsoft.com/en-us/magazine/dd347546.aspx#id0070044

      【讨论】:

      • 嗯,我不确定我是否同意你的第一点。对于初学者,令牌将被加密。其次,我只打算将这种身份验证方法用于帐户激活和重置密码页面,以便我可以通过电子邮件向用户发送允许他们登录的链接。否则,所有身份验证都将使用 cookie 完成。这也是几乎所有网站用于这些帐户管理任务的标准方式。
      • 作为执行安全审计的人,我不同意 uri 上的令牌是标准的。建议不要使用 url 上的令牌 - 搜索网络 - 这是一个常见的安全建议。当然,这取决于您的实施。当机器密钥可以远程确定时,加密意味着在某些具有 POET 漏洞的系统上要少得多。
      • 也...我在您的初始帖子中没有那条信息,即这仅用于重置等,而不是会话识别和其他身份验证。在您的情况下,请确保该令牌是一次性使用的令牌。
      • 当然 - weblogs.asp.net/scottgu/archive/2010/09/18/…weblogs.asp.net/scottgu/archive/2010/09/28/… 应该会给你主要的细节和补丁的链接(现在在 Windows 更新中)
      • 您想一次性制作您的令牌 - 我不会将此令牌作为表单身份验证令牌,因为它肯定会受到攻击 - 即使用户退出也可能会受到一小时的攻击。如果您正在发送电子邮件,我会在您的数据库中包含该唯一 ID,并且一旦验证,将其在您的数据库中过期,以便下次有人尝试使用它时,他们会收到一条消息,它已过期,他们必须请求新密码再次等请记住,您可以简单地登录用户-您可能不需要复制任何这些类-通过 FormsAuthentication.RedirectFromLoginPage(userName, false) 之类的简单方法
      猜你喜欢
      • 2015-11-16
      • 1970-01-01
      • 2016-10-19
      • 1970-01-01
      • 2014-01-01
      • 2011-10-07
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多