2016-04-26 32 views
1

我看了很多問題解決這個問題,似乎沒有任何工作。我正在嘗試從mvc Web應用程序調用Web API服務。這是我的客戶代碼:如何使用Windows身份驗證從MVC調用Web API服務?

var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true }) 
{ 
    BaseAddress = baseAddress 
}; 
var response = await client.GetAsync("items/5"); 

當我在本地運行它時,它工作。當我將項目發佈到服務器時,api總是返回401 Unauthorized。我在IIS的web api和mvc項目上啓用了Windows身份驗證。如何從mvc應用程序獲取正確的Windows憑據到api? Web api和mvc應用程序在同一個IIS服務器上運行。

+0

在被這個應用程序代碼運行的情況下解決了這個問題?另一個Web App?控制檯程序?那就是你要設置正確認證的地方。 –

+0

@CamBruce此客戶端代碼正在由mvc web應用運行 –

回答

2

如果有機會,MVC應用程序可以使用相同的Windows憑據向WebAPI發出所有請求,那麼我認爲您應該能夠將IIS的應用程序池配置爲以域用戶身份運行。默認情況下,IIS的應用程序池作爲一些機器本地帳戶運行。因此,如果它試圖通過網絡向Windows Authenticated資源發出請求,則遠程計算機無法識別Web服務器的機器本地帳戶。因此未經授權的錯誤。

但是,如果您想讓MVC應用程序調用WebAPI作爲向MVC應用程序發出請求的用戶,那麼您需要在web.config中啓用模擬。由於Kerberos/Active Directory的工作方式(查找kerberos雙跳),您可能還需要讓您的域管理員爲您的Web服務器計算機啓用Kerberos委派。

0

問題是,顯然如果您嘗試使用完全限定的域名向同一臺計算機發送請求,請求將自動無法防範反射攻擊。

我從

http://example.com/api 

改變baseAddress到

http://localhost/api 
相關問題