Chrome会保留Cookie,尽管它们已在服务器上设置已过期

时间:2018-06-08 18:14:52

标签: google-chrome firefox cookies

我在尝试清理冗余的OpenIdConnect.nonce cookie时碰到了这个问题。当客户端尝试访问受保护资源(Web服务)时,OpenIdConnect中间件会自动添加这些cookie。设置cookie后,中间件将客户端重定向到一个身份验证服务,该服务使用cookie来实现其自身的安全目的。

我的实际问题是"错误请求 - 请求太长"错误我的验收测试得到了,因为请求充满了几十个nonce cookie。反过来,这发生了,因为我的测试试图多次访问一些受保护的资源而没有经过适当的身份验证。

逻辑决策(在修复测试之前)是通过将到期时间戳设置为过去来删除冗余cookie:

private void ClearNonceCookies(AuthorizationContext filterContext)
{
    // Clear nonce cookies to prevent the request from growing too big over time
    foreach (var key in filterContext.HttpContext.Request.Cookies.AllKeys.Where(c => c.StartsWith("OpenIdConnect.nonce.")))
    {
        var cookie = filterContext.HttpContext.Response.Cookies[key];

        if (cookie != null)
        {
            cookie.Expires = SystemTime.UtcNow.AddYears(-5);

            filterContext.HttpContext.Response.Cookies.Set(cookie);
        }
    }
}

由于没有这么明显的原因,那是行不通的。

1 个答案:

答案 0 :(得分:0)

我的测试环境使用了http端点,而它在Web.config中也有此设置:

<httpCookies httpOnlyCookies="true" requireSSL="true" />

该行配置Web服务器以使所有cookie&#34;安全&#34;虽然我没有使用https绑定。

如上所述here,不安全的网站(http :)无法使用&#34; secure&#34;设置Cookie。指令了(Chrome 52+和Firefox 52+中的新功能),因此我的过期请求被浏览器忽略了。

解决方案是将requireSSL设置更改为false或使用https绑定。