C # HttpClient не удается выполнить запросы GET с проверкой подлинности Windows

#asp.net-core #windows-authentication #dotnet-httpclient

#asp.net-core #проверка подлинности Windows #dotnet-httpclient

Вопрос:

У меня есть приложение .NET Core 3.1 Api со следующей конфигурацией HttpClient. В Startup.cs

 services.AddAuthentication(IISDefaults.AuthenticationScheme);

services.AddHttpClient("myapi", c =>
{
    c.BaseAddress = new Uri(Configuration["endpoint"]);
    c.DefaultRequestHeaders.Authorization =
       new AuthenticationHeaderValue(
          IISDefaults.AuthenticationScheme, Convert.ToBase64String(
             System.Text.Encoding.UTF8.GetBytes($"{Configuration["username"]}:{Configuration["password"]}")));
});
 

Затем я пытаюсь выполнить HTTP-вызов следующим образом:

 var client = clientFactory.CreateClient(clientName);
HttpResponseMessage response = await client.GetAsync(url);            
if (response.IsSuccessStatusCode)            
    return await response.Content.ReadAsStringAsync(); 
 

однако я всегда получаю несанкционированный ответ при вызове внутреннего api. При отладке у меня включена проверка подлинности Windows и анонимная проверка подлинности.
С Postman мои вызовы API проходят, что подтверждает, что я получил правильные учетные данные.
Можете ли вы предложить какие-либо изменения, чтобы заставить это работать?

Ответ №1:

Вместо c.DefaultRequestHeaders.Authorization = этого у меня такая конфигурация

 c.ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler
{
  Credentials = new NetworkCredential("username", "password"),
  AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
  PreAuthenticate = true
});
 

Я предполагаю, что в вашем случае это не будет работать как есть, но я надеюсь, что это поможет вам в правильном направлении.