0

以下是我的問題的上下文:我正在開發一個Windows應用商店應用程序,該應用程序將在我們的客戶計劃使用的多個平板電腦上進行側裝。這款平板電腦應用程序將調用Web API,而後者將通過存儲庫(SQL Server通過EntityFramework)執行CRUD操作。一切都必須使用Windows身份驗證。這些平板電腦是運行Windows 10的Dell。每個用戶都將使用自己的活動域憑據登錄。平板電腦會將證書傳遞給Web API,然後將其傳遞到存儲庫(數據庫)。根據憑證,存儲庫將確定用戶所屬的組,並基於此信息,它將訪問用戶被允許訪問的資源。使用Windows身份驗證從Windows應用商店應用程序調用Web API

我的Web API工作正常。我用Fiddler測試了它。對於HTTP GET請求,我想測試,我檢查了「自動驗證」複選框,我可以看到三個連續的消息,前兩個返回401,第三個返回HTTP Code 200,以及我請求的數據。

但是,當我嘗試從Windows應用商店調用它時,我只發送一個GET請求,第一個。我的Web API託管在IIS Express中。根據該組中非常獨特的成員的建議,我將IIS Express配置爲使用我的開發機器的IP地址而不是「本地主機」來公開Web API。在這之前,我看不到任何GET請求打到服務器,甚至沒有看到第一個。

我知道Windows身份驗證使用NTLM方案,它需要一個協商過程,因此3條消息提手初始發送到服務器?

如何編寫我的Web API客戶端代碼以繞過此協商?我花了整整一個上午和下午的時間閱讀我的問題的解決方案,在SO和許多其他網站上,但不知何故,我仍然沒有得到它的工作。我必須錯過一些東西,我不知道是什麼。這是我在Web 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請求被髮送到服務器。我怎麼才能讓我的客戶在幕後跟上,就像Fiddler一樣,併發送另外兩條消息,以便第三個消息最終返回響應HTTP 200代碼和我在Fiddler中收到的數據?

如果任何人都能指引我走向正確的方向,我會非常感激。

回答

0

問題是未在我的應用程序的Package.appxmanifest文件的Capabilities選項卡中設置「Enterprise Authentication」設置。我花了一段時間才發現這是問題所在,但只要我檢查了它,我的應用就開始使用Windows身份驗證。

相關問題