wcf - El servidor ha rechazado las credenciales del cliente.
net.tcp (7)
Tengo un servicio WCF con enlace net.tcp, alojado en el servidor como un servicio de Windows. No puedo acceder a este servicio. Sin embargo, pude hacerlo cuando lo alojé en mi red local.
Error recibido
Mensaje: ** El servidor ha rechazado las credenciales del cliente.
Excepción interna:
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)
Intenté buscar la solución, pero no encontré ninguno que se ajuste a mis requisitos, por lo tanto, se publicó aquí.
¿Cual podría ser el problema?
Si hago mi modo de seguridad a Ninguno en el cliente
<security mode="None"></security>
Me sale otro error:
Error: La conexión de socket fue abortada. Esto podría deberse a un error al procesar su mensaje o al tiempo de espera de recepción excedido por el host remoto o un problema de recursos de red subyacente. El tiempo de espera del socket local era ''00: 00: 59.5149722 ''.
Acabo de tener este mismo problema al intentar que un servidor de la DMZ hablando con un servicio dentro de mi red. La solución que lo solucionó para mí fue agregar lo siguiente a app.config:
Tenga en cuenta el nodo de seguridad.
<bindings>
<netTcpBinding>
<binding name="customTcpBinding" maxReceivedMessageSize="20480000" transferMode="Streamed" >
<security mode="None"></security>
</binding>
</netTcpBinding>
</bindings>
Al igual que en @vonbalaji, he visto esto cuando la cuenta se ha bloqueado debido a que ingresó la contraseña incorrectamente varias veces.
El error es un error TokenImpersonation.
Lo que parece estar sucediendo es que la llamada entra, algunos códigos en el lado del servidor requieren que el usuario se haga pasar por el código del servidor.
El código del servidor se ejecuta como la cuenta del sistema local, por lo tanto, no puede suplantar a un usuario del dominio.
Tienes 2 opciones básicas:
- Ejecute el servicio en el contexto de seguridad de un usuario que puede suplantar a otro usuario
- Reescriba su solicitud de tal manera que no sea necesaria la suplantación de identidad.
El segundo error que recibiste de que "la conexión del zócalo se anuló" generalmente se produce cuando intentas bombear demasiados datos de tu servicio.
Recomiendo la suplantación de usuario para que las credenciales funcionen correctamente primero, luego piense en el recordatorio del problema.
Puede encontrar información útil sobre la suplantación en Cómo: Suplantar a un cliente en un servicio .
La nuestra es una aplicación basada en Windows que se conecta a un servicio WCF dentro de la intranet local. El nivel de seguridad se ha establecido en la autenticación de Windows. Tenemos este error de vez en cuando. En la investigación, descubrimos que la contraseña de Windows había caducado. Después de cambiar la contraseña, todo funcionó como normal ...
Es una comprobación simple si está recibiendo este error de vez en cuando.
Sé que esto ya ha sido respondido con "desactivar la seguridad". Pero en caso de que alguien esté interesado, logré obtener la autenticación de Windows de WCF Transport utilizando NetTcpBinding en un entorno de Intranet, que funcionó yo mismo después de mucho dolor.
Esencialmente se redujo a usar esta configuración:
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
Puede ver un poco más de detalle en la publicación de blog WCF Transport Windows usando NetTcpBinding en un entorno de Intranet .