#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
});
Я предполагаю, что в вашем случае это не будет работать как есть, но я надеюсь, что это поможет вам в правильном направлении.