CredentialCache.DefaultCredentials не учитывает учетные данные пула приложений IIS с ядром dotnet 2.2 - PullRequest
0 голосов
/ 23 октября 2019

Мне нужно сделать веб-запрос от WebServiceA, работающего от имени ServiceAccountA, к WebServiceB и сделать так, чтобы он аутентифицировался с использованием NTLM. Обе веб-службы являются API-интерфейсами DotNet Core 2.2, размещенными в IISServiceAccountA - это учетная запись службы, установленная в пуле приложений IIS. Просто чтобы быть ясным, я не делаю олицетворение.

Я использую библиотеку RestSharp для выполнения запросов HttpClient.

См. Аутентификатор NTLM: https://github.com/restsharp/RestSharp/blob/master/RestSharp/Authenticators/NtlmAuthenticator.cs

NTLMАутентификатор с RestSharp использует System.Net. CredentialCache.DefaultCredentials . Это работает локально, но после того, как я развернул веб-API dotnet core 2.2 на сервере Windows и разместил приложение в IIS (в процессе) CredentialCache.DefaultCredentials больше не работает, как ожидалось. WebServiceB возвращает 401.1, и когда я проверяю журналы IIS, после запроса вызова учетная запись службы не передается.

Я пытался использовать System.Net.CredentialCache.DefaultNetworkCredentials, но у меня возникла та же проблема. Я подтвердил, что WebServiceB правильно работает с аутентификацией Windows, обратившись к службе напрямую через веб-браузер, и он очень хорошо аутентифицирует мою личную идентификацию Windows.

В диспетчере задач я вижу, что рабочий процесс IIS действительно выполняется какправильная учетная запись службы. Есть ли лучший или другой способ извлечь объект ICredentials из текущего запущенного процесса?

1 Ответ

1 голос
/ 24 октября 2019

Чтобы помочь людям, у которых есть подобные проблемы. Я хотел бы опубликовать ответ здесь.

Когда вам не удалось аутентифицировать NTLM с помощью CredentialCache.DefaultCredentials. Вы можете попытаться отключить DisableLoopbackCheck.

1. Перейдите в раздел реестра HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa

2. Создайте REG_DWORD (32-разрядный)named DisableLoopbackCheck = 1

3. Пожалуйста, перезагрузите сервер, чтобы он заработал.

enter image description here

...