如何将Windows身份验证凭据从客户端传递到Web API服务

问题描述:

在我的公司环境中,我有IIS7.5托管Web API服务和通过RestSharp库调用该服务的单独网站。两者当前均配置有Windows身份验证。如何将Windows身份验证凭据从客户端传递到Web API服务

如果我用浏览器导航到任何一个,系统会提示我输入我的Windows凭据,并且一切都很好......我得到我想要的网页,并且REST服务吐出了我的数据。我正在努力解决的部分是如何使用单个凭证进行身份验证。我无法弄清楚如何将网站的凭证传递给服务(我尝试冒充但无法使用),或手动提示用户输入用户名/密码,然后使用“Windows”对其进行身份验证。

帮助noob out?

如果您在您的网站上使用模拟并且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

花了我两天的时间后,我找到了解决办法。

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未授权错误。