FormsAuthenticationModule是否能检测到……?

3

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

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


谢谢


1
表单身份验证对角色一无所知。如果您想在表单身份验证中使用角色,则必须自己教它有关角色的知识。 - Sam Axe
2个回答

4
有趣的是,我这周刚好研究了这个问题。
事实证明,FormsAuthenticationModule在EndRequest事件处理程序中确实执行了实际的重定向操作。但是,它并不决定是否应该发生重定向。如果响应状态代码为401(未授权),则进行重定向。
UrlAuthorizationModule是做出决定的地方(如另一个答案中所述),但它所做的只是通过将响应状态代码设置为401来指示请求未经授权。
因此,实际上是两个模块协同工作才能使重定向到登录页面发生。

好的,没问题 :) 实际上,Koders 上的列表似乎表明 401 的重定向是在 AuthenticationModule 中发生的 (http://bit.ly/s7eiX)。 - Zhaph - Ben Duguid
我在FormsAuthenticationModule的Mono源代码中注意到了这一点,并想知道为什么要等到EndRequest。这是非常合理的。谢谢。 - Charlie Flowers

3
根据文档,FormsAuthenticationModule仅在启用表单身份验证时设置ASP.NET应用程序用户的身份。然而,在其他地方查看(感谢Erv指出),表单身份验证模块随后通过钩入应用程序的EndRequest事件来负责将用户重定向到登录页面。这意味着它与角色无关 - 角色由RoleManagerModule处理。
所以UrlAuthorizationModule使用在web.config中配置的身份验证模块(即Forms,Passport/Live,Windows等)和角色提供程序(使用适当的角色模块)来强制访问权限,如果实际检查用户访问权限的CheckUrlAccessForPrinciple返回false,则会引发401错误,然后返回给ASP.NET处理。
应用程序然后引发EndRequest事件,FormsAuthenticationModule捕获该事件,最终将用户重定向到在web.config的Forms auth部分中定义的默认登录页面。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接