. Net Core HttpClient Digest Аутентификация - PullRequest
1 голос
/ 28 января 2020

Работа с API Mon go Atlas в. Net Core 3.1 приложении, но я не могу получить HttpClient для обработки вызова из дайджест-аутентификации.

Код отправляет первый запрос, получает ответ 401, а затем не пересылается с правильной аутентификацией.

Ниже приведен код, который я пытался заставить работать

var domain = "https://cloud.mongodb.com/";
var credCache = new CredentialCache();
credCache.Add(new Uri(domain),"Digest", new NetworkCredential(user,secret));
var httpClient = new HttpClient( new HttpClientHandler { Credentials = credCache});
var answer = await httpClient.GetAsync(new Uri($"{domain}api/atlas/v1.0/groups/{groupId}/databaseUsers"));

Вот ответ, который я получаю

StatusCode: 401, ReasonPhrase: 'Unauthorized', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, Headers:
{
  Date: Mon, 27 Jan 2020 21:03:14 GMT
  WWW-Authenticate: Digest realm="MMS Public API", domain="", nonce="generatedNonce", algorithm=MD5, qop="auth", stale=false
  Content-Type: application/json
  Content-Length: 106
}

Я успешно отправил запросы curl поэтому я уверен, что мой пользователь / секрет / группа верны.

Кто-нибудь видит что-то не так с этим кодом или знает, что я могу сделать для дальнейшей отладки этой проблемы?

1 Ответ

1 голос
/ 31 января 2020

Очевидно, у нас точно такая же проблема, или у меня была, по крайней мере, пока мой коллега не нашел решение для нее.

Было много изменений во внутренних компонентах HttpClient в 2.1 для поддержки нового SocketsHttpHandler, используйте эту строку кода на go вернуться к функциональности 2.0, и он должен снова заработать, поставить его Main или где-то перед вызовами, которые вы делаете.

AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);

В противном случае вам придется сначала отправить один запрос получите ответ 401, возьмите nonce из заголовка WwwAuthenticate, и вам, вероятно, также необходимо установить еще несколько полей в заголовке.

Cheers!

Нашел его в этом посте на реддит: https://www.reddit.com/r/dotnet/comments/9yailz/weird_dotnet_core_httpclient_bug_maybe/ea07edd/

...