【问题标题】:Can C#'s HttpClient accept cookies with a path?C# 的 HttpClient 可以接受带有路径的 cookie 吗?
【发布时间】:2019-10-03 23:35:29
【问题描述】:

我有这个代码:

var handler = new HttpClientHandler
{
    AllowAutoRedirect = false,
    CookieContainer = new CookieContainer(),
    UseCookies = true
};

return new HttpClient(handler)
{
    Timeout = Timeout.InfiniteTimeSpan
};

我将 OpenID Connect 与 ASP.Net Core 结合使用,它会返回一个相关 cookie,如下所示:

cookieHeader = "correlation=ABCDEFG; path=/signin; secure; HttpOnly";

我致电该网站:

using (HttpResponseMessage msg = client.SendAsync(request).Result)

并被重定向到 OpenID 服务器。但是,HttpClient 的 cookie 容器不包含任何 cookie。如果我手动将相同的 cookie 添加到响应中,仅将路径修改为等于 /,例如

cookieHeader = "correlation=ABCDEFG; path=/; secure; HttpOnly";

然后cookie出现在HttpClientCookieContainer中。我不想修改 ASP.Net Core 基础 OpenID 功能来更改 cookie 路径,因此 HttpClient 将获取 cookie 并且我可以进行身份​​验证。有没有办法让HttpClient 保存指定路径的cookie?

【问题讨论】:

    标签: c# cookies openid-connect dotnet-httpclient


    【解决方案1】:

    看起来这是一个设计上的静默失败。尝试手动添加这些 cookie 会产生 CookieException。看起来 ASP.Net Core 的 OpenID Connect 实现依赖于一个 RFC,该 RFC 取代了当前实现的一个 .NET Framework。在 RFC 2109 (.NET Framework) 中,您不能使用不属于当前请求的路径设置 cookie,而 .NET Core(根据 RFC 6265)确实允许甚至依赖此行为。我想现在是手动存储 cookie。

    Source

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多