Учетные данные веб-службы работают удаленно, но не на сервере - PullRequest
2 голосов
/ 06 марта 2019

Я звоню в веб-службу (с именем SecurityService), как показано ниже:

SecurityService.Service securityService = new SecurityService.Service();
securityService.Credentials = networkCredential;

return securityService.GetUserToken();

В службе включена аутентификация Windows, больше ничего. Этот фрагмент кода выше работает с удаленных машин.

Когда я отправляю этот же код на сервер IIS, на котором работает эта служба, я получаю ошибку 401:

The request failed with HTTP status 401: Unauthorized.

Я попробовал тот же кусок кода с WCF:

ServiceSoapClient client = new ServiceSoapClient();
client.ClientCredentials.Windows.ClientCredential = networkCredential;
return client.GetUserToken();

со следующими настройками:

<binding name="ServiceSoap">
  <security mode="TransportCredentialOnly">
    <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/>
  </security>
</binding>

Опять же, на сервере я не могу заставить его аутентифицироваться, с другого компьютера, подключенного к этому серверу, он работает.

Вот заголовки, полученные при расширенной регистрации в веб-сервисе:

Когда это работает:

sc-win32-status WWW-Authenticate Authorization
2147024891 "NTLM,Negotiate" -
0 - "Negotiate TlRMTVNTUAADAAAAGAAYAIoAAACi...."

При сбое вызывается из того же сервера:

sc-win32-status WWW-Authenticate Authorization
2147024891 "NTLM,Negotiate" -
1073741715 "NTLM,Negotiate" "Negotiate ADAAAAGAAYAI4AAACiAaIBpgAAABoAGgBY..."

Я также получил это сообщение вместо простой ошибки 401, когда использовал WCF:

The HTTP request is unauthorized with client authentication scheme 'Negotiate'. The authentication header received from the server was 'NTLM,Negotiate'. ---> The remote server returned an error: (401) Unauthorized.

Объяснение ошибки 1073741715:

STATUS_LOGON_FAILURE (-1073741715 (0xC000006D))
The attempted logon is not valid. This is due to either an incorrect user name or incorrect authentication information.

Почему-то мой код не проходит аутентификацию на веб-сервисе правильно, когда он запускается изнутри сервера.

Вот ссылка на ту же проблему. Ответ не распространяется, хотя:

401 Клиент «Согласование», сервер «Согласование, NTLM» при вызове сервера WCF на сервер

1 Ответ

0 голосов
/ 12 марта 2019

вам необходимо предоставить свои учетные данные для веб-приложения IIS или пула приложений IIS, связанных с вашим приложением IIS.

Для этого

  • Открыть IIS.
  • Нажмите «Пулы приложений»
  • Выберите пул приложений, в котором работает ваше приложение
  • Нажмите «Дополнительные свойства» на правой панели
  • Найдите удостоверение в разделе «Модель процесса» и нажмите ... кнопка
  • Нажмите на пользовательскую учетную запись и добавьте туда свою учетную запись Windows
  • Нажмите Ok и сохраните.

также убедитесь, что приложение не использует пользовательского пользователя.Или, в качестве альтернативы, нажмите «Приложение IIS», затем нажмите на дополнительные параметры в правой панели.После этого измените Учетные данные физического пути и Учетные данные физического PAth Тип входа

...