FormsAuthenticationModule是否检测到......?

时间:2009-05-13 20:51:20

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


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

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


感谢名单

2 个答案:

答案 0 :(得分:4)

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

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

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

因此,实际上是协调的两个模块会重定向到登录页面。

答案 1 :(得分:3)

根据文档,仅FormsAuthenticationModule

  

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

然而,在其他地方寻找(指向Erv的道具指出这一点)然后,表单身份验证模块负责通过挂钩到应用程序的EndRequest事件

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

处理

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

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