WebApp用户(Windows身份验证)对MVC Web API的委派失败

时间:2012-11-22 07:47:21

标签: asp.net-mvc-4 asp.net-web-api iis-7.5 dotnet-httpclient identity-delegation

我们有一个具有以下网站结构的IIS 7.5:

WebApp(ASP.NET Forms)=网站(http:// WebApp)
WebAPI(MVC 4 Web API)=转换为应用程序的文件夹(http:// WebApp / webapi)

两者都在同一个ApplicationPool下运行。

两者都具有相同的身份验证设置:
  - ASP.NET模拟(经过身份验证的用户)
  - Windows身份验证(提供商:协商)

web.configs都定义:

<authentication mode="Windows" />  
<identity impersonate="true" /> 

WebApp使用HttpClient从WebAPI调用WebService:

HttpClient _httpClient = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true });
_httpClient.BaseAddress = new Uri("http://WebApp/webapi/");
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage _response = _httpClient.GetAsync("api/Entity/Get").Result;

并且WebAPI使用MS Enterprise Library连接到数据库。

当我运行此localy时,一切正常,当我在IIS 7.5服务器上部署并启动远程调试时,我的HttpContext Web API中的当前用户是应用程序池标识而不是登录到Web的用户应用。我当然希望它是登录到WebApp的用户,因为我想使用基于AD帐户(组)的安全性。

任何人都可以提供一些建议来实现这一目标。提前谢谢。

1 个答案:

答案 0 :(得分:1)

以下答案帮助了我们(https://stackoverflow.com/a/10311823/68024):

  

有两种可能的方法。如果您有权访问您的   服务器aspnet_config.config,您应该设置以下设置   (在web.config中设置它们似乎没有效果):

<legacyImpersonationPolicy enabled="false"/>
<alwaysFlowImpersonationPolicy enabled="true"/>