2017-12-06 13 views
1

이상한 동작을 발견했으며 누군가 내 코드가 이와 같이 작동하는 이유에 대한 설명이 있는지 궁금합니다.HttpClient를 사용하여 localhost에서 나머지 api를 호출하여 401 인증을받지 못함, IIS 8.5

내 시나리오는 다음과 같습니다. 두 개의 나머지 API가 C#으로 생성되어 CoreApi 및 FrontApi를 호출 할 수 있습니다. 두 api는 동일한 서버에 별도의 사이트와 appPools를 가지고 있으며 두 appPools 모두 NetworkService로 실행됩니다. FrontApi는 HttpClient를 사용하여 CoreApi를 호출합니다. 나는 CoreApi를 호출하는 FrontApi의 ValuesController를 호출하여 호출을 트리거합니다. CoreApi는 Windows 인증을 사용하고 FrontApi는 익명 인증을 사용합니다.

내 개발 컴퓨터에서 FrontApi를 호스트하면 정상적으로 작동하지만 FrontApi가 CoreApi를 호출하면 전체 URL을 사용하여 동일한 서버에서 cohosting하면 401.0 권한이 없습니다. FrontApi에서 "http://localhost/api/values"을 사용하면 올바르게 작동합니다.

의견이 있으십니까?

HttpClientHandler authHandler = new HttpClientHandler() 
{ 
    Credentials = CredentialCache.DefaultNetworkCredentials 
}; 
using (HttpClient confClient = new HttpClient(authHandler)) 
{ 
    HttpResponseMessage message = await confClient.GetAsync("http://mysite.acme.com/api/values"); 
    if (message.IsSuccessStatusCode) 
    { 
     result = await message.Content.ReadAsStringAsync(); 
    } 
    else 
     result = message.StatusCode.ToString(); 
} 
+0

는 dev에 환경 또는 IIS 서버에서 작업 localhost입니다? – lloyd

+0

iis 서버. 이상하게 행동하는 유일한 시나리오는 동일한 컴퓨터에서 두 서비스를 호스팅하고 URL에서 전체 도메인 이름을 사용하는 것입니다. – Snorre

답변

0

CredentialCache.DefaultNetworkCredentials 속성은 FrontApi IIS 응용 프로그램 풀이 실행중인 자격 증명을 반환합니다. CoreApi는 FrontApi의 ApplicationPoolIdentity를 인증하는 방법을 알지 못하지만 NetworkService를 인증 할 수 있어야합니다.

ApplicationPoolIdentity에서 NetworkService로 응용 프로그램 풀 ID를 변경하면 CoreApi에서 401 응답이 수정됩니다.

enter image description here enter image description here