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

Jim*_*ast 14 c# asp.net authentication windows-authentication asp.net-web-api

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

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

帮助一个菜鸟?

小智 11

Web API的设置

  1. 启用 Windows Authentication

Web应用程序的设置

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

     <system.webServer>
         <validation validateIntegratedModeConfiguration="false" />
     </system.webServer>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 启用Windows AuthenticationASP.NET ImpersonationIIS中

您可以使用以下代码将数据发布到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);
}
Run Code Online (Sandbox Code Playgroud)

注意:如果您仍然收到401错误,则可能需要使用IP地址而不是URL的常规域名(例如:155.100.100.10而不是mycompany.com)


And*_*olm 9

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

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

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

  • 该链接的内容"已经退役". (7认同)
  • 我想警告你,Kerberos代表团是非平凡的.我还没有找到一个知道如何做或者愿意尝试的IT部门.解决方法是使用一个服务帐户,该帐户可以访问站点在调用API服务器到服务器时可以使用的所有内容.这不是最漂亮的解决方案,它要求您签入用户登录到网站的代码不会从API获得比他或她应该更多的信息.但至少它是一个工作选项,不需要对IT环境进行大量的侵入式更改. (6认同)