No se pueden pasar datos de contraseñas en ICredentials desde un cliente WCF al servicio de WCF en la 4.5 de.NET Framework

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 3082119
Síntomas
En un cliente Windows Communication Foundation (WCF), crear una interfaz nueva de la claseNetworkCredential utilizando el nombre de usuario y la contraseña especificados. A continuación, realice una llamada a un método de contrato WCF que toma ICredentials como argumento. Encontrará que después de la conversión de la interfaz ICredentials que se reciben en el servicio WCF una credencial de red, la propiedad de contraseña contiene una cadena vacía. Sin embargo, la propiedad Usernameconserva un valor válido y correcto.
Causa
Se trata de un problema conocido que se introdujo en la de Microsoft.NET Framework 4.0 cuando una nueva propiedad, SecurePassword, se agregó a la clase NetworkCredential. Esta propiedad sobrescribe la cadena de contraseña original cuando la propiedad SecurePassword se deserializa en el servicio. La propiedad SecurePasswordes de tipo SecureString. Por diseño, no es serializado y enviado. Sin embargo, la cadena de contraseña original se sobrescribe mediante el uso de un valor vacío. Este comportamiento también es por diseño.
Solución
Para corregir este problema, debe pasar la información de nombre de usuario y contraseña para el servicio, independientemente de las credenciales de red. Puede hacerlo creando un objeto definido por la aplicación para almacenar las credenciales y para pasar las credenciales a una nueva forma de servicio WCF que acepta el objeto como un argumento de método. Dado que este objeto definido por la aplicación contiene información confidencial, recomendamos que los datos se envían a través de una conexión cifrada con el servicio de WCF mediante sea https transporte security o seguridad de nivel de mensaje.
Más información
La followingexample muestra un servicio WCF que reproduce el problema. El servicio de WCF tiene el contrato siguiente:

[ServiceContract]
[ServiceKnownType(typeof(NetworkCredential))]
interfaz pública IService
{

[OperationContract]
cadena de GetData(ICredentials value);
}

Un cliente está utilizando el servicio como sigue:

iCredService.ServiceClient svcClient = new iCredService.ServiceClient();
Implementación ICredentials iCred = new System.Net.NetworkCredential ("ABC", "1234");
Resultado de la cadena = resultado = svcClient.GetData(iCred);

Con Visual Studio y establecer un punto de interrupción en el servicio con el valor. Contraseña estará vacía. Al examinar las ventanas de variables locales de Microsoft Visual Studio, verá el siguiente texto:

-value{System.Net.NetworkCredential}System.Net.ICredentials {System.Net.NetworkCredential}
-[System.Net.NetworkCredential]{System.Net.NetworkCredential}System.Net.NetworkCredential
Dominio"cadena"
Contraseña"cadena"
+SecurePassword{System.Security.SecureString}System.Security.SecureString
Cadena de nombre de usuario "ABC"
Implementación ICredentials NetworkCredential SecurePassword WCF

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 3082119 - Última revisión: 08/28/2015 19:14:00 - Revisión: 1.0

Microsoft .NET Framework 4.0, Microsoft .NET Framework 4.5, Windows Communication Foundation 4, Windows Communication Foundation 4.5

  • kbmt KB3082119 KbMtes
Comentarios