gpt4 book ai didi

c# - .NET WebApi HttpClient 不将 Windows 身份验证凭据发送到同一域

转载 作者:太空狗 更新时间:2023-10-29 20:26:56 32 4
gpt4 key购买 nike

我正在使用多个 Intranet API 来尝试构建一些应用程序,这些应用程序具有一些由所有应用程序共享的服务。许多这些服务可以使用 Javascript 请求直接从 GUI 调用,但是其中一些服务需要由其他服务器应用程序调用。

所有前端和 API 都使用 Windows 身份验证。现在我已经将其设置为授权任何经过 Windows 身份验证的用户。匿名身份验证已禁用。

我正在使用 HttpClient 从 Web 代码中连接到所需的服务。这是一个例子:

HttpClient client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true });
client.BaseAddress = new Uri(ConfigurationManager.AppSettings["OtherServiceUrl"]);

client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));

SomeResponseObject responseObject;
HttpResponseMessage response = client.GetAsync("SomeController").Result;
if (response.IsSuccessStatusCode)
{
responseObject = response.Content.ReadAsAsync<SomeResponseObject>().Result;
}
else
{
throw new ApplicationException("API request not successful");
}

好消息是,当我在本地运行服务时,它工作得很好。坏消息是,当我部署到 IIS 时,对 Web 服务的调用失败并显示未经授权的响应。

经过多次折腾,我意识到只有在目标 API 的域与调用应用程序的域相同时才会收到 Unauthorized 响应。它在我的本地盒子上工作,因为 IIS Express 为每个应用程序分配了一个新端口。 IIS中出现匹配域的情况是因为我在IIS中将调用应用程序和API都创建为同一个站点下的应用程序,所以这两个应用程序看起来就像同一个域中的目录。如果 HttpClient 注意到域匹配,它几乎不会费心从调用 Web 应用程序发送身份验证。

我在同一台服务器上创建了一个新站点,但绑定(bind)到不同的端口并将 API 放在那里,然后重试。果然问题解决了,API的请求顺利通过。

我可以放入一堆子域来处理所有这些不同的服务,或者仅仅依靠使用不同的端口来使这些服务的域独一无二,但对我来说,这种限制似乎很奇怪.有谁知道我是否可以在处理程序或客户端上设置一个属性,或者我可以做些什么来允许在同一 IIS 站点上运行的应用程序在使用 Windows 身份验证时通过 HttpClient 相互通信?

谢谢!

根据 Sachin 的建议,我还尝试将其添加到通过 HttpClient 发出 API 请求的应用程序的 webconfig 中:

<system.net>
<defaultProxy useDefaultCredentials="true" />
</system.net>

仍然没有运气。

最佳答案

看看这个:https://support.microsoft.com/en-us/kb/926642

在我的例子中,它与 Windows Server 2012 上的情况相同,但知识库中的解决方案仍然适用。环回检查将阻止凭据在同一主机上通过 httpClient 发送,这会导致 401。对我来说,唯一的解决方法是方法 2 - 在注册表中设置 DisableLoopbackCheck。我知道这是一项安全“功能”,但它肯定是在经典 Windows 环境中使用现代面向服务的体系结构的障碍。

关于c# - .NET WebApi HttpClient 不将 Windows 身份验证凭据发送到同一域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39105474/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com