繁体   English   中英

ASP.NET身份验证Cookie

[英]ASP.NET Authentication cookie

在具有基于表单的身份验证的应用程序上,我具有带有以下Authenticate事件处理程序的标准ASP.NET登录控件。

void Login_Authenticate(object sender, AuthenticateEventArgs e)
{
    if (Security.AuthenticateUser(Login.UserName, Login.Password))
    {
        e.Authenticated = true;
        RedirectFromLoginPage(Login.UserName);
    }
    else
    {
        e.Authenticated = false;
    }
}

RedirectFromLoginPage函数如下所示:

private void RedirectFromLoginPage(String username)
{
    String returnUrl = GetReturnUrl();
    FormsAuthentication.SetAuthCookie(username, true, "/");
    Response.Redirect(returnUrl, true);
}

在99%的情况下都可以正常工作。 但是,有时我会收到无法登录人员的支持电话。他们将输入其凭据,并重定向回首页(一切正常时会发生这种情况),但他们将无法登录。

考虑到这可能是cookie问题,我尝试通过将隐私选项设置为“阻止所有cookie”来在环境中重现该问题,并且能够重现该问题。 将调用SetAuthCookie函数,但在下一页上加载HttpContext.Current.User.Identity.IsAuthenticated将返回false。

在我的web.config中,身份验证设置如下:

<authentication mode="Forms">
  <forms loginUrl="..." timeout="180" cookieless="AutoDetect"/>
</authentication>

阅读MSDN上有关AutoDetect和SetAuthCookie的文档,我明白了:

AutoDetect如果设备配置文件支持cookie,则指定使用cookie。 对于已知支持cookie的桌面浏览器,启用后将使用探测机制尝试使用cookie。 如果设备不支持Cookie,则不会使用任何探测机制。

FormsAuthentication.SetAuthCookie:使用提供的cookie路径或URL(如果使用的是无cookie身份验证)为提供的用户名创建身份验证票证,并将其添加到响应的cookie集合中。

我认为在我的场景中,将使用无cookie身份验证,但是没有使用(无论如何,重定向后我在QueryString中什么都看不到)。

如果我在RedirectFromLoginPage函数中设置一个断点并测试一些值,我会得到:

bool cookieSupport = Request.Browser.Cookies; //"true"
bool redirectWithCookies = Request.Browser.SupportsRedirectWithCookie; //"true"
HttpCookieMode currentMode = FormsAuthentication.CookieMode; //"AutoDetect"

我不确定Request.Browser.Cookies在这里是否正确。 浏览器确实支持cookie,但是它们都被阻止了。

无论如何,我在发生问题的计算机上进行了几分钟的远程操作。 隐私设置设置为中,因此它应该能够接受cookie。 这是标准的Win7 / IE8安装程序。 我尝试将网站添加到用户的受信任区域,以通过https登录,但此操作无效。 其他问题的设置类似(机器上没有什么特别突出的,用户告诉我他们在其他网站上没有问题)

那我在做什么错呢?

我也遇到了类似的问题。 但这仅用于Internet Explorer8。经过研究,我发现IE8默认运行在无炊具模式下。 因此,我在web.config中更改了这一行: <forms loginUrl="..." timeout="180" cookieless="AutoDetect"/>改为<forms loginUrl="..." timeout="180" cookieless="UseUri"/> ,并且工作正常。

您是否在web.config文件中指定表单身份验证cookie的域? 它与网站的域名相匹配吗?

我相信IE中的“中等安全性”设置会阻止第三方Cookie,因此问题可能是IE认为您的身份验证Cookie是第三方Cookie。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM