internet explorer中的asp.net窗体身份验证问题
我的公司有一个web应用程序,它托管在客户机上,在ASP.net中使用表单身份验证。当访问网站并尝试在登录页面上进行身份验证时,用户将被重定向回登录页面。当通过身份验证访问它时,工作正常,用户能够进入站点。我们不能在我们的开发环境中复制这种行为,所以我们非常确定它与他们的服务器/环境有关 这个问题只有在使用Internet Explorer(使用ie 6、7、8测试)时才会发生。当客户端尝试使用firefox时,身份验证工作正常 我创建了一个调试页面,登录页面在调用FormsAuthentication.SetAuthCookie后重定向到该页面,该页面显示有关身份验证cookie的信息。在Internet Explorer中点击时,验证cookie不存在。当在FireFox中点击它时,它会 以前有没有人遇到过类似的情况,或者对可能出现的问题有什么建议 编辑: Web.configinternet explorer中的asp.net窗体身份验证问题,asp.net,authentication,Asp.net,Authentication,我的公司有一个web应用程序,它托管在客户机上,在ASP.net中使用表单身份验证。当访问网站并尝试在登录页面上进行身份验证时,用户将被重定向回登录页面。当通过身份验证访问它时,工作正常,用户能够进入站点。我们不能在我们的开发环境中复制这种行为,所以我们非常确定它与他们的服务器/环境有关 这个问题只有在使用Internet Explorer(使用ie 6、7、8测试)时才会发生。当客户端尝试使用firefox时,身份验证工作正常 我创建了一个调试页面,登录页面在调用FormsAuthentica
<authentication mode="Forms">
<forms name=".ASPXAUTH" loginUrl="Login.aspx" />
</authentication>
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
<!-- Page used to display authentication cookie information -->
<location path="AuthDebugPage.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
他们域的管理员查看了组策略,查看他们是否将阻止用户在IE上接受Cookie的任何内容下推到其节点,但他没有找到任何内容。他还从域中删除了一台计算机,并清除了它的所有组策略,但在internet explorer中进行身份验证时仍然遇到同样的问题。自2002年以来,Microsoft.NET中的Forms身份验证极不可能作为一般规则与Microsoftinternet explorer发生冲突。这显然是环境问题 我们要做的就是用Fiddler之类的工具观看网络,看看发生了什么。然后对Firefox执行同样的操作,并进行比较
一旦您看到差异,请尝试找出如何将差异限制在IE上。说到IIS,您是否检查了IIS在站点实例上尝试使用的身份验证方法?我相信Firefox会说服IIS使用“基本”身份验证,而IE会尝试使用其奇特的Windows身份验证等等
另外,您是否在主机文件中指定了站点的IP/主机名?这可能会以某种方式造成不同(有时好,有时坏)。就像ajh1138所说的,IE可能正在协商“集成身份验证”,而FireFox正在使用HTTP身份验证或普通的旧表单POST
IE可能映射到实际的Windows用户名(例如运行IE的用户),并且该用户可能无权访问该网页(即使匿名用户也无权访问)。这可能会产生你描述的行为。正如约翰所说,这是一种环境因素。我们打开了无cookieless身份验证,它工作得很好,因此用户的身份验证是正确的。我们的一位客户发现,当他们仅使用IP地址访问网站(例如)时,网站行为正常,他们能够通过登录页面,但当他们使用DNS名称时,却无法通过。事实证明,他们在internet explorer中的区域确实允许对外部站点(DNS名称也解析了)有足够的信任,就像本地intranet站点有cookie一样。我正在开发的站点在登录所有IE时也有类似的问题,只有一个是从Win 7运行的
实际的问题是我使用的主机名有下划线,不应该使用下划线。可能某些windows策略阻止为无效主机创建Cookie。当服务器日期/时间不正确并导致AuthCookie过期日期不正确时,我也遇到了同样的问题 检查服务器的日期/时间是否正确。使用以下方法:
int timeoutValue = 20; // This value is actually returned from a method;
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(txtLogin.Text, false, timeoutValue);
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
authCookie.Domain = "uptime.com.br";
authCookie.Expires = DateTime.Now.AddMinutes(timeoutValue);
HttpContext.Current.Response.Cookies.Add(authCookie);
也许auths可以帮助我们了解一些代码片段?您在web.config的forms authentication节点中设置了域值吗?您可以从web.config复制并粘贴整个部分吗?可能是因为人们有某种域策略设置,不允许在IE中使用Cookie?添加了auth代码和部分内容web.config发布并解决域策略问题。在web.Config的forms authentication节点中未设置域值。我认为这不是一个切实可行的解决方案,因为服务器在他们的控制下,该服务器的管理员将在fiddler上运行。如果您不找出问题所在,我看不出您如何可能解决该问题。这似乎指出了问题所在,但又是什么呢精确解是什么?我现在也遇到了同样的情况,但我不能要求我的客户使用IP地址而不是DNS。我仔细检查了我的DNS,发现里面有一个下划线。对于那些到达这里的人,你也可以检查这个。参见
int timeoutValue = 20; // This value is actually returned from a method;
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(txtLogin.Text, false, timeoutValue);
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
authCookie.Domain = "uptime.com.br";
authCookie.Expires = DateTime.Now.AddMinutes(timeoutValue);
HttpContext.Current.Response.Cookies.Add(authCookie);