Windows 서비스와 통신하는 웹 응용 프로그램 (IIS에서 호스팅)이 있습니다. Windows 서비스는 ASP.Net MVC 웹 API (자체 호스팅)를 사용하므로 JSON을 사용하여 http를 통해 통신 할 수 있습니다. 웹 응용 프로그램은 가장을 수행하도록 구성되며, 웹 응용 프로그램을 요청하는 사용자는 웹 응용 프로그램이 서비스를 요청하는 데 사용하는 사용자 여야한다는 생각입니다. 구조는 다음과 같습니다.
(빨간색으로 강조 표시된 사용자는 아래 예에서 언급 된 사용자입니다.)
웹 응용 프로그램은 다음을 사용하여 Windows 서비스에 요청합니다 HttpClient
.
var httpClient = new HttpClient(new HttpClientHandler()
{
UseDefaultCredentials = true
});
httpClient.GetStringAsync("http://localhost/some/endpoint/");
이렇게하면 Windows 서비스에 요청이 이루어 지지만 자격 증명이 올바르게 전달되지 않습니다 (서비스는 사용자를로보고 함 IIS APPPOOL\ASP.NET 4.0
). 이것은 내가 일어나고 싶은 것이 아닙니다 .
위의 코드를 WebClient
대신 사용하도록 변경하면 사용자의 자격 증명이 올바르게 전달됩니다.
WebClient c = new WebClient
{
UseDefaultCredentials = true
};
c.DownloadStringAsync(new Uri("http://localhost/some/endpoint/"));
위 코드를 사용하면 서비스에서 웹 응용 프로그램에 요청한 사용자로 사용자를보고합니다.
어떻게 내가 잘못하고있는 중이 야 HttpClient
제대로 자격 증명을 전달하지 않는 원인이되는 구현 (또는이와 버그를 HttpClient
)?
내가 사용하려는 이유 HttpClient
는 Task
s 와 잘 작동하는 비동기 API를 가지고 있지만 WebClient
의 asyc API는 이벤트로 처리해야하기 때문입니다.
DownloadStringTaskAsync
.Net 4.5에 있으며 async / await와 함께 사용할 수도 있습니다
HttpClient
이 없습니다 SetCredentials()
. 무슨 말인지 말해 주실 래요?
new HttpClient(new HttpClientHandler() { AllowAutoRedirect = true, UseDefaultCredentials = true }
Windows 인증 사용자가 액세스 한 웹 서버에서 작성 을 시도한 후 웹 사이트가 그 후 다른 원격 자원을 인증했습니다 (플래그 세트없이 인증 할 수 없음).