ASP.NET Core将默认凭据传递给HttpClient

问题描述 投票:0回答:1

如何将ASP.NET Core中的DefaultCredentials传递给HttpClient?

当我在Visual Studio中本地运行它时,效果很好。当前用户有权请求“ www.mycompany.com”。但是,一旦我将其发布到IIS,我就会收到401(未授权)信息,因为HttpClient在DefaultCredentials中获得了Web服务器用户(未经授权)。

Windows身份验证在Visual Studio和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。 仅授权本地用户发出请求

iis asp.net-core-2.2
1个回答
0
投票

我知道它在本地由当前用户运行,但是我不知道如何授权应用程序池...

正如戳和lex所说,如果您托管在IIS上,则DefaultCredentials将是应用程序池标识而不是用户帐户。

如果您想知道如何修改应用程序池标识,建议您执行以下步骤:

1。打开IIS管理控制台。

2。选择应用程序池和高级设置

enter image description here

3。修改应用程序池标识以使用自定义域帐户。

enter image description here


更新:

如果您想在用户凭证中使用登录名来访问其他api,我可以尝试使用Impersonation

        var user = (WindowsIdentity)User.Identity;


        WindowsIdentity.RunImpersonated(user.AccessToken, () =>
        {
            var impersonatedUser = WindowsIdentity.GetCurrent();
            var message =
                $"User: {impersonatedUser.Name}\t" +
                $"State: {impersonatedUser.ImpersonationLevel}";

            //ViewBag.UseImper = message;

            HttpClient Client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true });
            //Client.BaseAddress = new Uri("http://localhost:44331");
            Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            Client.DefaultRequestHeaders.Add("Application-Name", Assembly.GetExecutingAssembly().GetName().Name);

            var response = Client.GetAsync("http://127.0.0.1:44319/api/values").Result;

            int i = 0;

        });
© www.soinside.com 2019 - 2024. All rights reserved.