代码之家  ›  专栏  ›  技术社区  ›  Nikolai Koudelia

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

  •  0
  • Nikolai Koudelia  · 技术社区  · 8 年前

    我在清理冗余的OpenIdConnect时遇到了这个问题。临时饼干。当客户端试图访问受保护的资源(web服务)时,OpenIdConnect中间件会自动添加这些cookie。设置cookie后,中间件将客户端重定向到身份验证服务,该服务出于自身安全目的使用cookie。

    我的实际问题是,我的验收测试出现了“错误请求-请求太长”错误,因为请求中充满了几十个临时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 回复  |  直到 8 年前
        1
  •  0
  •   Nikolai Koudelia    8 年前

    我的测试环境使用了http端点,而它在Web上也有此设置。配置:

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

    这行代码将web服务器配置为使所有cookie“安全”,尽管我没有使用https绑定。

    如前所述 here ,不安全的网站(http:)无法再使用“安全”指令设置cookie(在Chrome 52+和Firefox 52+中新增),因此浏览器会忽略我的过期请求。

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

    推荐文章