IIS impersonate 401未经授权(2x asp.net MVC)

我有IIS网站与Windows身份validation(只)启用(让我们说,site.domain.com)。 我的网站在它的子网站上调用HTTP rest API(可以说site.domain.com/api)。 这是不同的应用程序。 它工作正常,当我把这个API作为应用程序池标识。 当我使用模拟,我得到错误401未经授权。

IIS服务器安装细节:

IIS服务器由第三方负载均衡器负载平衡。 IISpipe理器中的两个站点看起来像图像

这两个网站只有Windowsvalidation启用和协商作为第一个提供者。 两个网站都有不同的应用程序池 这些应用程序池具有相同的应用程序池标识(可以说DOMAIN \ apppool)。 Spn的设置是(你可以看到我尝试了一切):

PS C:\WINDOWS> setspn.exe -l DOMAIN\apppool Registered ServicePrincipalNames for SOMECN: HTTP/site/api HTTP/site.domain.com/api HTTP/site HTTP/site.domain.com 

我可以使用Kerberos与这两个站点进行通信。 useAppPoolCredentials = True并且useKernelMode = false为两个站点设置。 在AD应用程序池帐户已标记选项“信任此用户委派任何服务(仅Kerberos)”

错误:

IIS使用模拟logging失败的请求:

 2017-10-04 14:40:57 192.168.81.101 GET /api/Test/Impersonate - 443 - 192.168.81.21 - - 401 2 5 1433 2017-10-04 14:40:57 192.168.81.101 GET /api/Test/Impersonate - 443 - 192.168.81.21 - - 401 1 2148074254 0 2017-10-04 14:40:57 192.168.81.101 GET /api/Test/Impersonate - 443 - 192.168.81.21 - - 401 1 5 15 

使用应用程序池凭据进行成功尝试的IIS日志(不含模拟):

 2017-10-04 13:52:28 192.168.81.101 GET /api/Test/Impersonate - 443 - 192.168.81.21 - - 401 2 5 0 2017-10-04 13:52:28 192.168.81.101 GET /api/Test/Impersonate - 443 DOMAIN\apppool 192.168.81.21 - - 200 0 0 15 

申请详情:

应用程序在我的开发机器上成功运行 问题只在生产中。 在开发机器上,我使用我的主机名来访问该网站。

以下是我如何从我的MVC控制器调用API网站:

 [HttpGet] public ViewResult ImpersonateTest() { System.Security.Principal.WindowsImpersonationContext impersonationContext; impersonationContext = ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate(); using (var client = new WebClient() { UseDefaultCredentials = true }) { ViewBag.User = client.DownloadString(GlobalConfig.ApiPath + $"Test/Impersonate"); } impersonationContext.Undo(); return View(); } 

如果我删除了前三行,则使用应用程序池的凭据,并且所有操作都按预期工作。 但是我想用模拟的c。