0

여기에 내 문제의 컨텍스트가 있습니다. 클라이언트에서 사용할 여러 가지 탭에 측면로드 될 Windows 저장소 응용 프로그램을 개발 중입니다. 이 태블릿 앱은 웹 API를 호출하여 저장소 (EntityFramework를 통해 SQL Server)에서 CRUD 작업을 수행합니다. 모든 것이 Windows 인증을 사용해야합니다. 태블릿은 Windows 10을 실행하는 Dell입니다. 각 사용자는 고유 한 활성 도메인 자격 증명을 사용하여 로그인합니다. 태블릿은 자격 증명을 웹 API에 전달하고 웹 API는 저장소 (데이터베이스)로 전달합니다. 자격 증명을 기반으로 저장소는 사용자가 속한 그룹을 결정하고이를 기반으로 사용자가 액세스 할 수있는 리소스에 대한 액세스 권한을 부여합니다.Windows 인증을 사용하여 Windows Store 응용 프로그램에서 웹 API 호출

내 웹 API가 정상적으로 작동합니다. 나는 그것을 Fiddler와 테스트했다. HTTP GET 요청의 경우 "Automatically Authenticate"체크 박스를 선택하여 테스트하고 싶습니다. 요청한 데이터와 함께 첫 번째 두 개가 401로 반환되고 세 번째로 반환되는 HTTP 코드 200이 표시됩니다.

그러나 Windows 스토어 앱에서이 앱을 호출하려고하면 첫 번째 요청 만 받게됩니다. 내 웹 API는 IIS Express에서 호스팅됩니다. 이 그룹의 매우 다른 회원의 조언에 따라 "localhost"보다는 내 개발 컴퓨터의 IP 주소를 사용하여 웹 API를 노출하도록 IIS Express를 구성했습니다. 이 작업을 수행하기 전에 GET Requests가 서버에 도달하는 것을 보지 못합니다. 심지어 첫 번째 요청도 아닙니다.

Windows 인증이 NTLM 체계를 사용하며 교섭 프로세스가 필요하다는 것을 알고 있으므로 Fiddler가 처음에 서버로 보내는 3 가지 메시지가 있습니까?

이 협상을 건너 뛰려면 웹 API 클라이언트 코드를 작성해야합니까? 나는 아침과 오후에 나의 문제에 대한 해결책을 보냈다. 여기 그리고 다른 많은 웹 사이트에서, 그러나 어쨌든, 나는 여전히 그것을 작동시키지 못했다. 나는 뭔가를 놓치고 있어야하고 나는 무엇을 모르겠다.

var authHandler = new HttpClientHandler() 
{ 
    Credentials = CredentialCache.DefaultNetworkCredentials, 
    ClientCertificateOptions = ClientCertificateOption.Automatic 
}; 

var webApiClient = new HttpClient(authHandler) 
{ 
    BaseAddress = new Uri(_serviceUri), // _serviceUri is a string that looks like this "http://10.120.5.201:53045" 
}; 

webApiClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

HttpResponseMessage response = await webApiClient.GetAsync("api/user"); 

내 전화가 GetAsync에서 반환되지 않습니다,하지만 피들러에서, 나는 첫 번째 GET 요청이 서버에 게시되는 것을 볼 수 있습니다 여기에 웹 API 클라이언트 측에 내 코드입니다. 피들러처럼 백그라운드에서 내 클라이언트를 추적하고 다른 두 메시지를 보내면 결국 세 번째 응답 메시지가 응답 HTTP 200 코드와 피들러에서받은 데이터로 반환됩니다.

누구나 올바른 방향으로 나를 가리킬 수 있다면, 나는 매우 감사 할 것입니다.

답변

0

문제는 "엔터프라이즈 인증"설정이 내 앱의 Package.appxmanifest 파일의 기능 탭에서 설정되지 않았기 때문입니다. 그것이 문제라는 것을 알아내는 데는 시간이 걸렸지 만, 확인하자마자 내 앱이 Windows 인증을 사용하기 시작했습니다.

관련 문제