我有一个站点,我们在其中设置了带有 Windows 身份验证的自动登录,如果失败,它会要求用户名/密码以表单形式登录。
这样做的方式是,我们将授权设置为带有特定页面(Winlogin.aspx)的表单。Winlogin.aspx 是使用授权 Windows 设置的。在 Winlogin.aspx.cs 的代码中,它获取 this.Request.ServerVariables["LOGON_USER"] 并使用 request.GetUserToken() 使用用户的令牌创建 FormsAuthenticationTicket,设置具有加密版本的 cookie 并将浏览器发送到表单授权的 login.aspx 页面。
Login.aspx 获取 cookie,对其进行解密,并假设将 HttpContext.Current.User 设置为在授权成功后从 Winlog.aspx 发送的用户创建的 WindowsIdentity。
这已经在 IIS6 上完美运行了一年多,但我们正在更新我们的服务器并迁移到 IIS 7,但现在我得到了一个无效的模拟令牌 - 它不能被复制。
这是使用的代码
// Extract the roles from the cookie, and assign to our current principal, which is attached to the HttpContext.
FormsAuthenticationTicket winAuthTicket = FormsAuthentication.Decrypt(authCookie.Value);
String token = winAuthTicket.UserData;
IntPtr userToken = new IntPtr(int.Parse(token);
-----> Line that gives error now. <-----
WindowsIdentity identity = new WindowsIdentity(userToken, "NTLM", WindowsAccountType.Normal, true);
HttpContext.Current.User = new WindowsPrincipal(identity);
我已经研究了 2 天,试图弄清楚。
有人有想法吗?