如何将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委派。
答
花了我两天的时间后,我找到了解决办法。
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未授权错误。
谢谢@Anders。该网站和API正在不同的网站上运行。我会看看Kerberos。 – 2014-10-24 08:18:01
我想警告你,Kerberos代表团是不平凡的。我还没有找到一个知道如何做或愿意尝试的IT部门。解决方法是使用服务帐户,该帐户有权访问网站在调用API服务器到服务器时可以使用的所有内容。这不是最漂亮的解决方案,它需要检入代码,用户登录到网站才能从API获取比他或她预期更多的信息。但至少它是一个工作选项,不需要对IT环境进行大量的侵入性修改。 – 2014-10-24 08:32:25
该链接的内容“已经退役”。 – KSwift87 2017-11-28 15:56:11