我的公司在客户端的计算机上托管了一个Web应用程序,该程序在ASP.net中使用表单身份验证。访问网站http://www.client.com/Application并尝试在登录页面上进行身份验证时,用户会被重定向回登录页面。通过http://localhost/Application访问它时,身份验证工作正常,用户可以进入该站点。我们无法在开发环境中复制此行为,因此我们非常确定它与其服务器/环境有关。
问题只发生在使用Internet Explorer时(使用ie,7,8测试)。当客户端尝试使用firefox时,身份验证工作正常。
我创建了一个调试页面,在调用FormsAuthentication.SetAuthCookie后,登录页面会重定向到该页面,该页面显示有关身份验证cookie的信息。在Internet Explorer中访问它时,身份验证cookie不存在。当它在FireFox中击中时,它会。
之前有没有人遇到过这样的事情,或者对可能出现的问题有任何建议?
编辑:
的Web.config
<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>
LogOn.aspx.vb
If (adAuth.IsAuthenticated(Domain, txtUserName.Text, txtPassword.Text)) Then
Dim AuthDebug As Boolean = System.Configuration.ConfigurationSettings.AppSettings("AuthDebug")
If AuthDebug Then
FormsAuthentication.SetAuthCookie(SystemUserName, False)
Response.Redirect("AuthDebugPage.aspx")
Else
FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, False)
End If
End If
他们的域管理员查看了组策略,看看他们是否正在向他们的节点推送任何阻止用户在IE上接受cookie而他没有找到任何内容的节点。他还从域中取出了一台机器并清除了所有组策略,但仍然在Internet Explorer中进行身份验证时遇到同样的问题。
答案 0 :(得分:6)
当服务器日期/时间不正确并且导致AuthCookie到期日期不正确时,我遇到了同样的问题。
检查服务器的日期/时间是否正确。
答案 1 :(得分:5)
约翰说这是环保的。我们启用了无cookie身份验证,并且运行正常,因此用户正在进行身份验证。我们的一位客户发现,当他们仅使用IP地址访问网站(例如http://111.111.111.111)时,网站表现正常并且他们能够通过登录页面但是当他们使用DNS名称时却没有。在Internet Explorer中关闭他们的区域确实允许对外部站点(DNS名称也解析了)的足够信任,因为它使本地Intranet站点有cookie。
答案 2 :(得分:3)
我正在开发的网站在所有IE中都有类似的问题登录,只有一个是从Win 7运行的。
实际问题是我使用的主机名有下划线,不应该使用。也许某些Windows策略阻止为无效主机创建cookie。
答案 3 :(得分:1)
作为一般规则,自2002年以来 Microsoft .NET中的表单身份验证极不可能打破 Microsoft Internet Explorer。这显然是环保的。
要做的事情是用Fiddler或其他东西观看网络,看看发生了什么。然后用Firefox做同样的事情,并进行比较。
一旦你看到差异,试着找出这种差异如何限制在IE。
答案 4 :(得分:0)
说到IIS,您是否检查过IIS尝试在站点实例上使用的身份验证方法?我相信Firefox会说服IIS使用“基本”身份验证,而IE会尝试使用其花哨的Windows身份验证等。
此外,您是否在HOSTS文件中指定了站点的IP /主机名?这可能会有所不同(有时是好的,有时是坏的)。
答案 5 :(得分:0)
就像ajh1138所说的那样,当FireFox使用HTTP身份验证或普通旧表单POST时,IE可能正在协商“集成身份验证”。
IE可能正在映射到实际的Windows用户名(例如运行IE的用户),并且该用户可能无法访问该网页(即使匿名用户也这样做)。这可能会产生你描述的行为。
答案 6 :(得分:0)
使用这种方式:
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);