注销MixedMode身份验证。在配置文件对象上显示错误的用户

时间:2014-10-29 07:32:03

标签: c# asp.net authentication forms-authentication windows-authentication

我在Web应用程序中使用Windows和Forms身份验证。在IIS中启用了身份验证方案。我们在Windows身份验证成功后显式设置Forms Cookie,因为应用程序依赖于Forms cookie。这一切都按预期工作。

问题是即使在我以Windows用户身份登录后退出,新请求(Login.aspx)仍然有Context.User作为我的Windows Principal。 即使在登录内部我仍然创建一个新的Forms cookie,Asp.net Profile对象仍然具有Windows Principal作为User.Since我们在整个应用程序中使用Profile对象,它显示的是另一个用户而不是登录的用户。

我想知道为什么会这样?我们是否需要在注销时执行某些操作以防止IIS为下一个发送到Login.aspx的请求传递安全令牌

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

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

编辑:  现在我有更多细节:在Application Begin Request中,Content.User将变为null。但是当请求到达FormsAuthentication_OnAuthenticate时,Context.User被设置为Windows principal.I不知道哪些事件设置了,我怎么能阻止它?

编辑: 我发现Context.User is null in Application_BeginRequest但它被设置为`FormsAuthentication_OnAutheutate

中的Windows主体

1 个答案:

答案 0 :(得分:2)

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

以下SO问题帮助我解决了这个问题:Mixed Mode Authentication