我在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
答案 0 :(得分:2)
最后我发现了这个问题。真正的问题是设置整个根文件夹以使用Windows和Forms身份验证。理想情况下,您需要为Windows(WinLogin.aspx)设置单独的登录页面,并为此页面设置Win和表单身份验证。对于应用程序的其余部分,仅设置表单身份验证。然后WinLogin应创建表单Cookie并重定向到申请的其余部分。
以下SO问题帮助我解决了这个问题:Mixed Mode Authentication