以混合模式身份验证注销.在配置文件对象上显示错误的用户

本文关键字:显示 错误 用户 对象 配置文件 模式 混合 身份验证 注销 | 更新日期: 2023-09-27 18:28:17

我在Web应用程序中同时使用Windows和Forms身份验证。这两种身份验证方案都在IIS中启用。我们在Windows身份验证成功后明确设置了Forms Cookie,因为应用程序依赖于Forms Cookie。这一切都如预期的那样工作。

问题是,即使在我以Windows用户身份登录后注销,新请求(Login.aspx)仍然将Context.User作为我的Windows主体。即使在登录中我仍然创建了一个新的Forms cookie,Asp.net Profile对象仍然以Windows Principal作为用户。由于我们在整个应用程序中使用Profile对象,它显示的用户与登录的用户不同

我想知道为什么会发生这种事?我们是否需要在注销时采取措施来阻止IIS为下一个进入Login.aspx 的请求传递安全令牌

我是否需要在FormsAuthentication_OnAuthenticate上的每个请求上手动设置Context.User通过读取cookie并在cookie 中将Context.User设置为Userdata

我在退出时执行document.execCommand("ClearAuthenticationCache")

编辑:现在我有了更多的细节:在ApplicationBeginRequest中,Content.User为null。但是当请求到达FormsAuthentication_OnAuthenticate the Context.User时,它被设置为Windows主体。我不知道是什么事件造成了这种情况,我该如何防止这种情况发生?

编辑:我发现Context.User is null in Application_BeginRequest,但它在`FormsAuthentication_OnAuthenticate

以混合模式身份验证注销.在配置文件对象上显示错误的用户

中被设置为Windows主体

我终于解决了这个问题。真正的问题是将整个根文件夹设置为使用Windows和Forms身份验证。理想情况下,您需要有一个单独的Windows登录页面(WinLogin.aspx),并仅为此页面设置Win和表单身份验证。对于应用程序的其余部分,请仅设置Forms Authentication。然后,WinLogin应该创建一个Forms Cookie并重定向到应用程序的其余部分。

下面的SO问题帮助我弄清楚了这一点:混合模式身份验证