我有此代码:
var handler = new HttpClientHandler
{
AllowAutoRedirect = false,
CookieContainer = new CookieContainer(),
UseCookies = true
};
return new HttpClient(handler)
{
Timeout = Timeout.InfiniteTimeSpan
};
我正在使用带有ASP.Net Core的OpenID Connect,它会返回如下所示的相关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出现在HttpClient
的{{1}}中。我不需要修改ASP.Net Core的基本OpenID功能来更改cookie路径,因此CookieContainer
可以获取cookie并进行身份验证。有没有一种方法可以使HttpClient
保存具有指定路径的Cookie?
答案 0 :(得分:0)
这似乎是设计使然的失败故障。尝试手动添加这些cookie会产生一个CookieException
。看起来ASP.Net Core的OpenID Connect实现依赖于RFC取代了当前实现的.NET Framework。在RFC 2109(.NET Framework)中,当.NET Core(根据RFC 6265)允许甚至依赖于此行为时,不能使用不属于当前请求的路径设置cookie。我想现在它将是手动cookie存储。