【问题标题】:Does FormsAuthenticationModule detect whether …?FormsAuthenticationModule 是否检测是否……?
【发布时间】:2009-05-13 20:51:20
【问题描述】:


FormsAuthenticationModule 用于使用加密 cookie 跟踪用户和角色信息。

但是这个模块是否还包含实际检测用户请求网页是否具有表单身份验证票证的代码,如果没有,则将用户重定向到登录页面,或者实际上是 UrlAuthorizationModule 告诉 FormsAuthenticationModule 将未经授权/未经身份验证的用户重定向到登录页面?


感谢

【问题讨论】:

  • 表单身份验证对角色一无所知。如果你想在表单身份验证中使用角色,那么你必须自己教它有关角色的知识。

标签: .net asp.net authentication forms-authentication httpmodule


【解决方案1】:

奇怪的是,我这周刚刚研究了这个。

事实证明,FormsAuthenticationModule 确实在 EndRequest 事件处理程序中进行了实际重定向。但是,它并没有决定应该发生重定向。如果响应状态码是 401(未授权),它会进行重定向。

UrlAuthorizationModule 是做出决定的地方(如另一个答案中所述),但它所做的只是通过将响应状态代码设置为 401 来指示请求未授权。

所以,实际上是两个模块协同工作,才实现了对登录页面的重定向。

【讨论】:

  • 很公平 :) 事实上,Koders 上的列表似乎表明 401 上的重定向发生在 AuthenticationModule (bit.ly/s7eiX) 中。
  • 我在 FormsAuthenticationModule 的 Mono 源代码中注意到了这一点,并想知道为什么它要等到 EndRequest。这很有意义。谢谢。
【解决方案2】:

根据文档,仅限 FormsAuthenticationModule

在启用表单身份验证时为 ASP.NET 应用程序设置用户身份。

但是,环顾其他地方(Erv 指出这一点的道具),然后表单身份验证模块负责通过挂钩到应用程序的 EndRequest 事件将用户重定向到登录页面

这意味着它与角色无关 - 角色由 RoleManagerModule 处理

所以UrlAuthorizationModule 使用在 Web 配置中配置的身份验证模块(即表单、Passport/Live、Windows 等)和角色提供程序(使用哪个角色模块是合适的)来强制访问,如果实际检查用户访问权限的CheckUrlAccessForPrinciple返回false,则会引发401错误,然后返回ASP.NET处理。

应用程序随后引发 EndRequest 事件,该事件由 FormsAuthenticationModule 拾取,最终将用户重定向到 web.config 的 Forms auth 部分中定义的默认登录页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 2011-11-22
    • 2018-04-11
    • 2021-11-12
    相关资源
    最近更新 更多