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

у меня есть служба 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'.

7 ответов


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

обратите внимание на узел безопасности.

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

ошибка является ошибкой TokenImpersonation.

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

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

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

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

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

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

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

вы можете увидеть немного больше деталей в блогепроверка подлинности Windows транспорта WCF с помощью NetTcpBinding в интрасети среды.


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

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


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


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

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

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


подобно @vonbalaji, я видел это, когда учетная запись была заблокирована из-за неправильного ввода пароля несколько раз.