11

在我的公司環境中,我有IIS7.5託管Web API服務和通過RestSharp庫調用該服務的單獨網站。兩者當前均配置有Windows身份驗證。如何將Windows身份驗證憑據從客戶端傳遞到Web API服務

如果我用瀏覽器導航到任何一個,系統會提示我輸入我的Windows憑據,並且一切都很好......我得到我想要的網頁,並且REST服務吐出了我的數據。我正在努力解決的部分是如何使用單個憑證進行身份驗證。我無法弄清楚如何將網站的憑證傳遞給服務(我嘗試冒充但無法使用),或手動提示用戶輸入用戶名/密碼,然後使用「Windows」對其進行身份驗證。

幫助noob out?

回答

8

如果您在您的網站上使用模擬並且API在同一臺服務器上運行,它應該可以正常工作。

http://msdn.microsoft.com/en-us/library/aa292118(v=vs.71).aspx

但是,如果你想從該網站的API遷移到不同的服務器,這將停止工作。雙服務器設置需要Kerberos委派。

+0

謝謝@Anders。該網站和API正在不同的網站上運行。我會看看Kerberos。 – 2014-10-24 08:18:01

+5

我想警告你,Kerberos代表團是不平凡的。我還沒有找到一個知道如何做或願意嘗試的IT部門。解決方法是使用服務帳戶,該帳戶有權訪問網站在調用API服務器到服務器時可以使用的所有內容。這不是最漂亮的解決方案,它需要檢入代碼,用戶登錄到網站才能從API獲取比他或她預期更多的信息。但至少它是一個工作選項,不需要對IT環境進行大量的侵入性修改。 – 2014-10-24 08:32:25

+0

該鏈接的內容「已經退役」。 – KSwift87 2017-11-28 15:56:11

5

花了我兩天的時間後,我找到了解決辦法。

web API的設置 在您的web API上啓用Windows身份驗證。

Web應用程序的設置 在您的web應用程序上啓用Windows身份驗證。 添加<identity impersonate="true" /> web.config的system.web。 添加

<system.webServer> 
     <validation validateIntegratedModeConfiguration="false" /> 
     </system.webServer> 

在web.config中

啓用Windows身份驗證和從IIS ASP.NET模擬。

用戶下面的代碼張貼在網頁API數據(以及類似的獲取)

using (var client = new WebClient { UseDefaultCredentials = true }) 
      { 
       client.Headers.Add(HttpRequestHeader.ContentType, "application/xml; charset=utf-8"); 
       byte[] responseArray = client.UploadData("URL of web API", "POST", Encoding.UTF8.GetBytes(XMLText)); 
       string response = Encoding.ASCII.GetString(responseArray); 
      } 

注:最重要的是始終通過IP撥打您的Web API,如果您使用的網址,你總是可以得到的401未授權錯誤。

相關問題