【发布时间】:2020-03-22 13:17:18
【问题描述】:
如何将 ASP.NET Core 中的 DefaultCredentials 传递给 HttpClient?
当我在 VisualStudio 中本地运行它时,它工作正常。当前用户有权请求“www.mycompany.com”。但是一旦我将它发布到 IIS,我就会得到 401(未授权),因为 HttpClient 在 DefaultCredentials 中获取了 web-server-user(未授权)。
Windows 身份验证在 VisualStudio 和 IIS 中处于活动状态。
我的 c# 代码:
HttpClient Client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true });
Client.BaseAddress = new Uri("www.mycompany.com");
Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
Client.DefaultRequestHeaders.Add("Application-Name", Assembly.GetExecutingAssembly().GetName().Name);
HttpResponseMessage response = Client.GetAsync("/classes").Result;
编辑
我知道它在本地与当前用户一起运行,但我不知道如何授权应用程序池...
EDIT2
我没有完全正确地解释它。我想将本地用户的身份验证传递给 HttpClient。 只有本地用户有权提出请求
【问题讨论】:
-
当您使用 Visual Studio 运行它时,您正在使用当前用户运行它。当您部署到 IIS 时,这是使用应用程序池标识运行的。您需要向目标系统授权应用程序池身份,或者更改运行应用程序池的用户。
-
您应该注意很多关键差异blog.lextudio.com/…
-
“我想将本地用户的身份验证传递给 HttpClient。” – 你需要委托。这是完全不同的事情,需要对 Kerberos 身份验证进行一些复杂的设置。
标签: iis asp.net-core-2.2