В настоящее время мы размещаем веб-приложение. net core 3.1 в IIS (сервер DEV), и оно использует Windows Аутентификацию. Мы хотим олицетворять учетные данные вызывающего абонента, когда мы вызываем другой webapi в одном из действий контроллера, вот наш код
[Authorize]
public IActionResult Get()
{
_logger.LogInformation("Boom! In Get");
WindowsIdentity.RunImpersonated(((WindowsIdentity)HttpContext.User.Identity).AccessToken, () =>
{
_logger.LogInformation($"Received request");
HttpClient _client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true })
{
BaseAddress = new Uri("http://SomeTestUrl.com/")
};
var result = _client.GetAsync("/api/program").Result;
var json = result.Content.ReadAsStringAsync().Result;
_logger.LogInformation($"Returning response");
});
return Ok("True");
}
Он отлично работает на моей локальной машине с IIS Express, но не работает на сервере DEV. Я получаю ниже ошибки.
Есть идеи, почему я получаю эту ошибку? Как правильно олицетворять пользователя в действии контроллера?
Другие наблюдения:
Система. Net .Http.HttpRequestException: Обычно это временная ошибка при разрешении имени хоста и означает, что локальный сервер сделал не получить ответ от авторитетного сервера. ---> System. Net .Sockets.SocketException (11002): Обычно это временная ошибка при разрешении имени хоста и означает, что локальный сервер не получил ответ от авторитетного сервера. в System. Net .Http.ConnectHelper.ConnectAsyn c (Строковый хост, порт Int32, CancellationToken cancellationToken) --- Конец внутренней трассировки стека исключений --- в System. Net .Http.ConnectHelper.ConnectAsyn c (Строковый хост, порт Int32, CancellationToken cancellationToken) в System. Net .Http.HttpConnectionPool.ConnectAsyn c (запрос HttpRequestMessage, логическое значение allowHttp2, CancellationToken cancellationToken) в System. Net. 1045 * (запрос HttpRequestMessage, CancellationToken cancellationToken) в системе. Net .Http.HttpConnectionPool.GetHttpConnectionAsyn c (запрос HttpRequestMessage, CancellationToken cancellationToken) в запросе на возврат *. * * * * * Boolean doRequestAuth, CancellationToken cancellationToken) в System. Net .Http.AuthenticationHelper.SendWithAuthAsyn c (запрос HttpRequestMessage, Uri authUri, учетные данные ICredentials, логический preAuthenticat) Например, Boolean isProxyAuth, логическое значение doRequestAuth, пул HttpConnectionPool, CancellationToken cancellationToken) в System. Net .Http.RedirectHandler.SendAsyn c (запрос HttpRequestMessage, CancellationToken * 1995). * (Запрос HttpRequestMessage, CancellationToken cancellationToken) в системе. Net .Http.HttpClient.FinishSendAsyncBuffered (Task`1 sendTask, запрос HttpRequestMessage, CancellationTokenSource cts, логические значения disposeCts) * 10 * 30 * 10