我们有一个具有以下网站结构的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帐户(组)的安全性。
任何人都可以提供一些建议来实现这一目标。提前谢谢。
答案 0 :(得分:1)
以下答案帮助了我们(https://stackoverflow.com/a/10311823/68024):
有两种可能的方法。如果您有权访问您的 服务器aspnet_config.config,您应该设置以下设置 (在web.config中设置它们似乎没有效果):
<legacyImpersonationPolicy enabled="false"/> <alwaysFlowImpersonationPolicy enabled="true"/>