如何将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的设置

  1. 启用Windows Authentication

Web应用程序的设置

  1. 启用Windows Authentication
  2. 在web.config的中添加
  3. 在web.config中添加以下内容:

         
  4. 在IIS中启用Windows AuthenticationASP.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)