Может ли C # HttpClient принимать куки с путем? - PullRequest
0 голосов
/ 16 мая 2019

У меня есть этот код:

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. Однако контейнер cookie HttpClient не содержит файлов cookie. Если я вручную добавлю идентичный файл cookie в ответ, изменив только путь, равный /, например

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

Затем файл cookie появляется в HttpClient CookieContainer. Я не хочу изменять базовую OpenID-функциональность ASP.Net Core для изменения путей к cookie-файлам, поэтому HttpClient будет получать cookie-файлы, и я могу проходить проверку подлинности. Есть ли способ заставить HttpClient сохранить куки с указанными путями?

1 Ответ

0 голосов
/ 16 мая 2019

Похоже, что это отказ по умолчанию. Попытка добавить эти куки вручную приводит к CookieException. Похоже, что реализация OpenID Connect в ASP.Net Core основана на RFC, который заменяет тот, который в настоящее время реализует .NET Framework. В RFC 2109 (.NET Framework) вы не можете установить cookie с путем, который не является частью текущего запроса, в то время как .NET Core (согласно RFC 6265) разрешает и даже полагается на это поведение. Я предполагаю, что это будет ручное хранение печенья.

Источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...