ASP. NET Учетные данные для передачи по умолчанию в HttpClient - PullRequest
0 голосов
/ 22 марта 2020

Как передать DefaultCredentials в ASP. NET Ядро в HttpClient?

Он работает нормально, когда я запускаю его локально в VisualStudio. Текущий пользователь авторизован для запроса "www.mycompany.com". Но как только я публикую sh его в IIS, я получаю 401 (неавторизованный), потому что HttpClient получает пользователя веб-сервера (не авторизованного) в DefaultCredentials.

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. Запросить разрешение могут только локальные пользователи

1 Ответ

0 голосов
/ 23 марта 2020

Я понимаю, что локально он работает с текущим пользователем, но я не знаю, как авторизовать пул приложений ...

Как говорят poke и lex, если вы размещены на IIS, DefaultCredentials будет удостоверением пула приложений, а не учетной записью пользователя.

Если вы хотите узнать, как изменить удостоверение пула приложений, я предлагаю вам выполнить следующие шаги:

1 .Откройте консоль управления IIS.

2.Выберите пул приложений и дополнительные настройки

enter image description here

3.Установите идентификатор пула приложений использовать учетную запись домена.

enter image description here


Обновление:

Если вы хотите использовать учетные данные пользователя для доступа к другим API, я мог бы попытаться использовать Олицетворение .

        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;

        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...