我有两个网站,A
and B
. A
使用一个 APIB
暴露,并且B
需要 Windows 身份验证。两个站点都位于域中D
.
API 通过以下方式使用HttpClient
,以及当站点A
在我的域帐户下本地运行(位于 DomainP
),访问被授予。在这种情况下,HttpClient
实例化如下:
using(var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials: true }))
When A
部署到测试服务器,上面的结果是401 Unauthorized
回复。测试服务器上的应用程序池在域中的服务帐户下运行D
.
当明确使用该服务帐户时,如下所示:
var credential = new NetworkCredential("service-account", "password", "D");
var cache = new CredentialCache
{
{
new Uri(apiServerUri), "NTLM", credential
}
};
var handler = new HttpClientHandler
{
Credentials = cache
};
using(var client = new HttpClient(handler))
...
再次运行站点A
在本地,访问权限仍然被授予。当通过浏览器直接访问 API 并指定服务帐户凭据时,也会授予访问权限。日志表明它肯定是用于访问 API 的服务帐户。
将上述内容部署回测试服务器仍然会导致401 Unauthorized
.
部署站点A
到 IIS 的本地实例,也成功使用了 APIB
.
跑步现场B
本地,然后通过站点访问它A
本地,结果是401 Unauthorized
.
通过测试服务器上的浏览器访问 API,其中A
已部署,并指定服务帐户凭据,还会给出401 Unauthorized
.
我不知道从这里到哪里去 - 我是否在代码中遗漏了一些东西来让它工作?或者可能是 IIS 或 AD 问题?