为了账号安全,请及时绑定邮箱和手机立即绑定

域的 Cookie 未用于子域

域的 Cookie 未用于子域

C#
回首忆惘然 2021-07-20 17:10:07
我HttpClient在我的应用程序中使用将我的用户/密码发送到一个服务,该服务返回一些我以后可以用于所有其他请求的 cookie。该服务位于https://accounts.dev.example.com/login并返回两个具有Domain=.dev.example.com. 我发现的问题是,在某些机器(Windows 域控制器)中,当我请求子域中的资源时没有使用这些 cookie https://accounts.dev.example.com/health-check,但根据MDN 文档,域的 cookie 可用于请求资源子域:域= 可选指定 cookie 将发送到的那些主机。如果未指定,则默认为当前文档位置的主机部分(但不包括子域)。与早期规范相反,域名中的前导点被忽略。如果指定了域,则始终包含子域。您知道如何正确配置HttpClient将域 cookie 传递给子域请求吗?更多细节:我的身份验证服务返回的 cookiehttps://accounts.dev.example.com/login在 HTTP 标头中如下所示:Set-Cookie: AK=112233;Version=1;Domain=.dev.example.com;Path=/;Max-Age=5400;Secure;HttpOnly, Set-Cookie: AS=445566;Version=1;Domain=.dev.example.com;Path=/;Max-Age=5400;Secure;HttpOnly, 然后我可以CookieContainer在普通工作站中使用以下任一调用查询 C# :cookies.GetCookies("https://accounts.dev.example.com")cookies.GetCookies("https://dev.example.com")两者都将返回 2 个 cookie,如:$Version=1; AK=112233; $Path=/; $Domain=.dev.example.com$Version=1; AS=445566; $Path=/; $Domain=.dev.example.com但是在其他机器(域控制器)中,第一个调用将返回一个空列表,而第二个将返回 2 个 cookie。为什么CookieContainer.GetCookies的行为会因运行代码的机器而异?我的工作站正在使用Microsoft Windows 10 Home Single Language (.Net 4.0.30319.42000),而 DC 正在使用Microsoft Windows Server 2012 R2 Datacenter (.Net 4.0.30319.36399).代码这是我的代码的修改版本:public static async Task<string> DoAuth(CookieContainer cookies,                                        Dictionary<string, string> postHeaders,                                        StringContent postBody){    try    {        using (var handler = new HttpClientHandler())        {            handler.CookieContainer = cookies;            using (var client = new HttpClient(handler, true))            {                foreach (var key in postHeaders.Keys)                    client.DefaultRequestHeaders.Add(key, postHeaders[key]);                var response = await client.PostAsync("https://accounts.dev.example.com/login", postBody);                response.EnsureSuccessStatusCode();                           }        }    }
查看完整描述

2 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

潜在的问题似乎是 Set-Cookie 标头中的错误。问题的原因似乎是标题中的Version=组件Set-Cookie。这使得 CookieContainer 跌倒并导致奇怪的$Version$Domaincookie 然后在随后的客户端请求中被发送。据我所知,也没有办法去除这些破损的饼干。GetCookies()使用原始域进行迭代不会发现错误的 cookie。


查看完整回答
反对 回复 2021-07-31
  • 2 回答
  • 0 关注
  • 180 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信