2017-04-20 4 views
0

UWP 앱이 Windows 인증을 사용하는 로컬 IIS에 대해 401 권한이없는 이유는 무엇입니까? Windows 인증에 의해 보호 로컬 IIS 웹 사이트에 HTTP 요청을

합니다 (ENTEPRISE 인증 기능 포함) UWP 응용 프로그램을 실행하는 문제, 응용 프로그램은 401 권한이 응답을받습니다. 응용 프로그램이 IIS가 아닌 다른 컴퓨터에서 실행되는 경우 (응용 프로그램이 다른 컴퓨터로 이동되거나 원격 Windows 인증으로 보호 된 URL 요청) 요청이 성공합니다.

엔터프라이즈 (기념일 판)의 AD 도메인에 가입 나는 윈도우 10를 실행하고

을 IIS.

내 로컬 IIS 인스턴스에서 기본 웹 사이트에 대해 Windows 인증을 사용하고 익명 인증을 사용하지 않도록 설정했습니다. 활성화 된 공급자는 "협상"및 "NTLM"입니다. 나는 가장자리에 http://localhost/test.aspx 방문하면

<%= User.Identity.Name %> 

, 크롬, 또는 IE가, 내가 제대로 인증 된 내 사용자 이름을 제시하고있다 :

나는 단순히이 들어있는 루트에에서 Test.aspx 페이지를 만들었습니다 .

나는 다음과 같은 기능을 (14,393 구축 대상) 간단한 UWP 응용 프로그램을 만들었습니다

UWP :

<Capabilities> 
    <Capability Name="internetClient" /> 
    <Capability Name="privateNetworkClientServer" /> 
    <uap:Capability Name="enterpriseAuthentication" /> 
    <uap:Capability Name="userAccountInformation" /> 
</Capabilities> 

이 애플리케이션의 코드는 단순히 :

public MainPage() 
{ 
    this.InitializeComponent(); 

    var result = Nito.AsyncEx.AsyncContext.Run(async() => 
    { 
     using (var httpClient = new System.Net.Http.HttpClient()) 
     { 
      return await httpClient.GetStringAsync("http://localhost/test.aspx"); 
     } 
    }); 

    textBlock.Text = result; 
} 

결과

요청하는 UWP 앱과 IIS가 동일한 컴퓨터에있는 경우 UWP 앱의 HTTP 요청은 401 Unauthorized으로 실패합니다. 요청하는 응용 프로그램 및 IIS가 서로 다른 컴퓨터에있는 경우

enter image description here

:

네트워크 프로파일이 인증을 시도하는 것을 보여줍니다 (여러 요청이 WWW 인증 챌린지/응답 방식의 부분 참고) 요청이 성공합니다.

즉, 요청 URL을 변경하여 내 개발 컴퓨터의 FQDN (http://localhost/test.aspxhttp://computername.domain/test.aspx)이되고 두 번째 컴퓨터에서 앱을 실행하면 (즉, 두 번째 컴퓨터의 앱이 내 개발 컴퓨터의 IIS) 요청이 성공합니다. 또는 개발 컴퓨터에서 UWP를 성공적으로 실행할 수 있지만 원격 IIS를 호출 할 수는 있습니다. 더

몇 가지 세부 사항

  • OK 200의 UWP 응용 프로그램의 요청 결과 익명 인증은 로컬 호스트 IIS에서 사용하는 경우.
  • 응용 프로그램의 디버그 속성 페이지에서 "로컬 네트워크 루프백 허용"을 선택했는데 checknetisolation으로 루프백이 활성화되어 있는지 확인했습니다.

답변

0

UWP를 루프백 또는 로컬 호스트에 연결할 수 없습니다. 익명 인증은 로컬 호스트 IIS에서 사용하는 경우 OK 200에서 https://msdn.microsoft.com/en-us/library/windows/apps/dn640582.aspx

+0

UWP 응용 프로그램의 요청 결과 :

는 사이드 로딩 또는 기업 환경에 있다면 해결 방법이 있습니다. 또한 응용 프로그램의 디버그 속성 페이지에서 "로컬 네트워크 루프백 허용"을 선택했습니다. 루프백이 checknetisolation으로 활성화되었는지 확인했습니다. 원래이 질문에 언급하지 않아서 죄송합니다. – artfulmethod