如何将Windows身份validation凭据从客户端传递到Web API服务
在我的企业环境中,我有IIS7.5托管Web API服务和一个单独的网站,通过RestSharp库调用该服务。 两者目前都配置了Windows身份validation。
如果我使用浏览器导航到任何一个,我被提示输入我的Windows凭证,一切都很好……我得到了我想要的网页,REST服务吐出了我的数据。 我正在努力弄清楚的部分是如何使用单个凭证进行身份validation。 我无法弄清楚如何将网站的凭证传递给服务(我尝试模仿,但它不起作用),或手动提示用户输入用户名/密码,然后用“Windows”validation它们。
帮助一个菜鸟?
如果您在网站上使用模拟并且API在同一台服务器上运行,那么它应该可以正常运行。
http://msdn.microsoft.com/en-us/library/aa292118(v=vs.71).aspx
但是,如果您将API移动到与站点不同的服务器,这将停止工作。 双服务器设置需要Kerberos委派。
Web API的设置
- 启用
Windows Authentication
Web应用程序的设置
- 启用
Windows Authentication
- 在web.config的
中添加 -
在web.config中添加以下内容:
-
在IIS中启用
Windows Authentication
和ASP.NET Impersonation
您可以使用以下代码将数据POST到Web API(显然也是GET)
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); }
注意 :如果您仍然收到401错误,则可能需要使用IP地址而不是URL的常规域名(例如:155.100.100.10而不是mycompany.com)