如何将ASP.NET核心中的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;
编辑
我知道它在本地以当前用户身份运行,但我不知道如何授权应用程序池...
编辑2
我解释得不太正确。我想将身份验证从本地用户传递到HttpClient。只有本地用户有权发出请求
2条答案
按热度按时间efzxgjgh1#
我知道它在本地以当前用户身份运行,但我不知道如何授权应用程序池...
正如普克和莱克斯所说,如果你托管在IIS上,DefaultCredentials将是应用程序池的身份而不是用户帐户。
如果你想知道如何修改应用池标识,我建议你可以按照下面的步骤:
1.打开IIS管理控制台。
2.选择应用程序池与高级设置
3.修改应用程序池标识以使用自定义域帐户。
更新:
如果您想使用登录用户凭据来访问其他API,我可以尝试使用模拟。
huwehgph2#
使用WebClient和HttpClient之间似乎存在行为差异。
请尝试使用WebClient。它似乎为子请求给予了正确的凭据,而HttpClient在模拟时不允许派生子线程。