繁体   English   中英

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

[英]How to pass Windows Authentication credential from client to Web API service

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

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

帮助一个菜鸟?

Web API的设置

  1. 启用Windows Authentication

Web应用程序的设置

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

      <system.webServer> <validation validateIntegratedModeConfiguration="false" /> </system.webServer> 
  4. 在IIS中启用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地址而不是URL的常规域名(例如:155.100.100.10而不是mycompany.com)

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM