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

时间:2014-10-17 17:07:49

标签: c# asp.net authentication windows-authentication asp.net-web-api

在我的公司环境中,我有IIS7.5托管Web API服务和一个单独的网站,通过RestSharp库调用该服务。两者目前都配置了Windows身份验证。

如果我使用浏览器导航到任何一个,我提示输入我的Windows凭据,一切都很好......我得到了我想要的网页,REST服务吐出了我的数据。我努力弄清楚的部分是如何使用单一凭证进行身份验证。我无法弄清楚如何将网站的凭据传递给服务(我尝试冒充,但它没有工作),或手动提示用户输入用户名/密码然后验证他们使用" Windows"。

帮助一个菜鸟?

2 个答案:

答案 0 :(得分:11)

网络API的设置

  1. 启用Windows Authentication
  2. 网络应用程序的设置

    1. 启用Windows Authentication
    2. 在web.config
    3. <identity impersonate="true" />中添加<system.web>
    4. 在web.config中添加以下内容:

       <system.webServer>
           <validation validateIntegratedModeConfiguration="false" />
       </system.webServer>
      
    5. 在IIS

    6. 中启用Windows AuthenticationASP.NET Impersonation

      您可以使用以下代码将数据发布到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地址而不是网址的常规域名(例如:155.100.100.10而不是mycompany.com )

答案 1 :(得分:9)

如果您在网站上使用模拟并且API在同一台服务器上运行,那么它应该可以正常运行。

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

但是,如果您将API移动到与站点不同的服务器,则此操作将停止。双服务器设置需要Kerberos委派。