FormsAuthenticationModule用于使用加密的 cookie 跟踪用户和角色信息。
但是该模块是否还包含实际检测用户请求网页是否具有表单身份验证票证的代码,如果没有,则将用户重定向到登录页面,或者实际上是UrlAuthorizationModule告诉FormsAuthenticationModule将未经授权/未经身份验证的用户重定向到登录页面?
谢谢
FormsAuthenticationModule用于使用加密的 cookie 跟踪用户和角色信息。
但是该模块是否还包含实际检测用户请求网页是否具有表单身份验证票证的代码,如果没有,则将用户重定向到登录页面,或者实际上是UrlAuthorizationModule告诉FormsAuthenticationModule将未经授权/未经身份验证的用户重定向到登录页面?
谢谢
奇怪的是,我这周刚研究过这个。
事实证明,FormsAuthenticationModule 确实在 EndRequest 事件处理程序中进行了实际重定向。但是,它并没有决定应该发生重定向。如果响应状态码是 401(未授权),它会进行重定向。
UrlAuthorizationModule 是做出决定的地方(如另一个答案中所述),但它所做的只是通过将响应状态代码设置为 401 来指示请求未授权。
所以,实际上是这两个模块协同工作,使重定向到登录页面发生。
根据文档,仅FormsAuthenticationModule
启用表单身份验证时,设置 ASP.NET 应用程序的用户身份。
然而,环顾其他地方(Erv指出这一点的道具),然后表单身份验证模块负责通过挂钩到应用程序的EndRequest事件将用户重定向到登录页面
这意味着它与角色无关 - 角色由RoleManagerModule处理
因此UrlAuthorizationModule使用 Web 配置中配置的身份验证模块(即 Forms、Passport /Live、Windows等)和角色提供程序(使用适当的角色模块)来强制访问,如果CheckUrlAccessForPrinciple实际检查用户访问权限返回 false,引发 401 错误,然后返回 ASP.NET 处理。
然后应用程序引发 EndRequest 事件,该事件由 FormsAuthenticationModule 拾取,最终将用户重定向到 web.config 的 Forms auth 部分中定义的默认登录页面。