Подтвердить что ты не робот

Сервер отклонил учетные данные клиента

У меня есть служба WCF с привязкой net.tcp, размещенная на сервере в качестве службы Windows. Я не могу получить доступ к этой услуге. Однако я смог сделать это, когда я разместил его в своей локальной сети.

Полученная ошибка

Сообщение: ** Сервер отклонил учетные данные клиента.  

Внутреннее исключение:

System.Security.Authentication.InvalidCredentialException:
The server has rejected the client credentials.
---> System.ComponentModel.Win32Exception:
The logon attempt failed --- End of inner exception stack trace
--- at System.Net.Security.NegoState.ProcessAuthentication(LazyAsyncResult lazyResult)
at System.Net.Security.NegotiateStream.AuthenticateAsClient(NetworkCredential credential, ChannelBinding binding, String targetName, ProtectionLevel requiredProtectionLevel, TokenImpersonationLevel allowedImpersonationLevel)
at System.Net.Security.NegotiateStream.AuthenticateAsClient(NetworkCredential credential, String targetName, ProtectionLevel requiredProtectionLevel, TokenImpersonationLevel allowedImpersonationLevel)
at System.ServiceModel.Channels.WindowsStreamSecurityUpgradeProvider.WindowsStreamSecurityUpgradeInitiator.OnInitiateUpgrade(Stream stream, SecurityMessageProperty& remoteSecurity)

Пробовал поиск решения, но не нашел ни одного, который соответствует моим требованиям, поэтому размещен здесь.

В чем может быть проблема?

Если я делаю свой режим безопасности None на клиенте

<security mode="None"></security>

Я получаю еще одну ошибку:

Ошибка: Соединение сокетов было прервано. Это может быть вызвано ошибкой обработки вашего сообщения или превышением времени приема удаленным хостом или проблемой сетевого ресурса. Локальный тайм-аут гнезда был "00: 00: 59.5149722".

4b9b3361

Ответ 1

У меня просто была такая же проблема, пытаясь заставить сервер в DMZ разговаривать с сервисом внутри моей сети. Решение, которое исправило это для меня, заключалось в том, чтобы добавить в app.config следующее:

Обратите внимание на безопасность node.

<bindings>
  <netTcpBinding>
    <binding name="customTcpBinding" maxReceivedMessageSize="20480000" transferMode="Streamed" >
      <security mode="None"></security>
    </binding>
  </netTcpBinding>
</bindings>

Ответ 2

Ошибка - ошибка TokenImpersonation.

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

Код сервера работает как локальная системная учетная запись, поэтому он не может выдавать себя за пользователя домена.

У вас есть 2 основных варианта:

  • Запустите службу в контексте безопасности пользователя, которому разрешено выдавать себя за другого пользователя.
  • Перепишите ваше приложение таким образом, чтобы олицетворение не требовалось

Ответ 3

Я знаю, что на это уже ответил "выключить безопасность". Но в случае, если кому-то интересно, мне удалось получить аутентификацию WCF Transport Windows с использованием NetTcpBinding в среде Intranet, работающей после огромной боли.

По сути, это сводится к использованию этой конфигурации:

<security mode="Transport">
  <transport clientCredentialType="Windows" />
</security>

Вы можете увидеть немного более подробно в сообщении блога Проверка подлинности WCF Transport Windows с использованием NetTcpBinding в среде Intranet.

Ответ 4

Наше приложение, использующее Windows, подключается к службе WCF в локальной интрасети. Уровень безопасности установлен на проверку подлинности Windows. Иногда мы получаем эту ошибку. В ходе расследования мы выяснили, что пароль для Windows истек. После изменения пароля все работало нормально...

Это простая проверка, если вы периодически получаете эту ошибку.

Ответ 5

Кажется, клиентский запрос не аутентифицирован на сервере. Здесь вы можете найти полезную информацию здесь и здесь.

Ответ 6

Вторая ошибка, которую вы получили, что "Соединение сокета было прервано", обычно возникает, когда вы пытаетесь перекачать слишком много данных из вашего сервиса.

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

Вы можете найти полезную информацию о олицетворении в Как выполнить олицетворение клиента на службе.