web-dev-qa-db-fra.com

Le serveur a rejeté les informations d'identification du client.

J'ai un service WCF avec liaison Net.tcp, hébergé sur le serveur en tant que service Windows. Je ne suis pas en mesure d'accéder à ce service. Cependant, j'ai pu le faire lorsque je l'ai hébergé sur mon réseau local.

Erreur reçue

Message: ** Le serveur a rejeté les informations d'identification du client . 

Exception intérieure:  

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)

Essayé de chercher la solution, mais n'en ai trouvé aucune qui corresponde à mes exigences, donc posté ici.

Quel pourrait être le problème?

Si je mets mon mode de sécurité sur Aucun sur le client

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

Je reçois une autre erreur:

Erreur: La connexion de socket a été abandonnée. Cela peut être dû à une erreur de traitement de votre message ou à un dépassement du délai de réception par l'hôte distant, ou à un problème de ressource réseau sous-jacent. Le délai d'attente de la prise locale était '00: 00: 59.5149722 '.

19
Bravo

Je viens d'avoir ce même problème en essayant d'obtenir un serveur dans le DMZ parler à un service de mon réseau. La solution qui a résolu le problème pour moi était d'ajouter ce qui suit au fichier app.config:

Notez le nœud de sécurité.

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

L'erreur est une erreur TokenImpersonation.

Ce qui semble se produire, c’est que l’appel arrive. Certains codes côté serveur exigent que l’utilisateur soit imité par le code du serveur.

Le code du serveur est exécuté en tant que compte système local, il ne peut donc pas emprunter l'identité d'un utilisateur de domaine.

Vous avez 2 options de base:

  • Exécuter le service dans le contexte de sécurité d'un utilisateur autorisé à emprunter l'identité d'un autre utilisateur
  • Réécrivez votre application de sorte que l'emprunt d'identité ne soit pas requis
6
Shiraz Bhaiji

Je sais que cela a déjà été répondu avec "éteindre la sécurité". Mais au cas où quelqu'un serait intéressé, j'ai réussi à obtenir l'authentification Windows de WCF Transport à l'aide de NetTcpBinding dans un environnement Intranet, après une période très pénible. 

Il s’agissait essentiellement d’utiliser cette configuration:

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

Vous pouvez voir un peu plus de détails dans l'article de blog Authentification Windows du transport WCF à l'aide de NetTcpBinding dans un environnement Intranet.

3
John Reilly

Notre application est une application Windows qui se connecte à un service WCF dans l’intranet local. Le niveau de sécurité a été défini sur l'authentification Windows. Nous avons parfois cette erreur. Après enquête, nous avons découvert que le mot de passe Windows avait expiré. Après avoir changé le mot de passe, tout a fonctionné normalement ...

C'est une simple vérification si vous recevez parfois cette erreur. 

2
vonbalaji

Il semble que la demande du client n’est pas authentifiée sur le serveur. Vous pourriez trouver des informations utiles ici et ici .

1
Anand

La deuxième erreur que vous obtenez "La connexion de socket a été abandonnée" survient généralement lorsque vous essayez de pomper trop de données de votre service. 

Je recommande d'emprunter l'identité des utilisateurs pour que les informations d'identification fonctionnent correctement, puis pensez au rappel du problème.

Vous pouvez trouver des informations utiles sur l'emprunt d'identité dans Comment: emprunter l'identité d'un client sur un service.

0
Sagar Bhat

Semblable à @vonbalaji, je l'ai vu lorsque le compte a été verrouillé en raison d'une mauvaise saisie du mot de passe à plusieurs reprises.

0
user2871239