我有两个应用程序:一个是在.NET 4.5上编写的WebAPI REST服务,另一个是在.NET Core 2上编写的客户端应用程序。在服务端启用了Windows身份验证。客户端一个使用HttpClient进行简单的GET调用,HttpClientHandler加载了来自配置的凭据,它是一些服务帐户。非常基本的东西,很容易用大量的例子进行搜索,根本就没有什么花哨的东西。
当从我的本地开发笔记本电脑到DEV服务器执行此调用时,一切都按预期工作:客户端配置中提供的用户在服务上成功通过身份验证,并且能够执行允许执行的任何操作。
如果我从浏览器(Chrome)执行此调用,它也可以正常工作 - 它要求我提供凭据,然后返回与我放在那里的任何凭据完全相关的结果。它以这种方式与远程和本地服务一起工作。
但是,如果我在笔记本电脑上本地运行服务(本地IIS服务器,而不是Express服务器)并使用localhost地址执行调用,那么我会观察到奇怪的行为:Windows身份验证似乎也可以正常工作,但服务的用户authenticates不是来自客户端配置的。相反,它是我的AD帐户,我在Windows中以交互方式登录(顺便说一下,它是赢得10个x64)。
当然,我已经在我的应用程序中验证了每次配置设置和运行时值的五次,本地和开发服务器的IIS上的所有设置,Web应用程序以及用于应用程序的IIS服务器级别和应用程序池。我看到的一切看起来都不错 - 除了在localhost上的行为不同。另外,我搜索了我能想象到的每个问题,但似乎仍无法找到对此行为的解释。
那么,为什么HttpClient在localhost上使用我的帐户而不是显式提供的凭据?我在这里缺少什么?