Impossible de transmettre les données de mot de passe dans l'interface ICredentials à partir d'un client WCF au service WCF dans le 4.5 de.NET Framework

IMPORTANT : Cet article est issu d'une traduction automatique réalisée par un logiciel Microsoft et non par un traducteur professionnel. Cette traduction automatique a pu aussi être révisée par la communauté Microsoft grâce à la technologie Community Translation Framework (CTF). Pour en savoir plus sur cette technologie, veuillez consulter la page http://support.microsoft.com/gp/machine-translation-corrections/fr. Microsoft vous propose en effet des articles traduits par des professionnels, des articles issus de traductions automatiques et des articles issus de traductions automatiques révisées par la communauté Microsoft, de manière à ce que vous ayez accès à tous les articles de notre Base de connaissances dans votre langue. Il est important de noter que les articles issus de la traduction automatique, y compris ceux révisés par la communauté Microsoft, peuvent contenir des erreurs de vocabulaire, de syntaxe ou de grammaire. Microsoft ne pourra être tenu responsable des imprécisions, erreurs, ainsi que de tout dommage résultant d’une traduction incorrecte du contenu ou de son utilisation par les clients.

La version anglaise de cet article est la suivante: 3082119
Symptômes
Dans un client Windows Communication Foundation (WCF), vous créez une nouvelle interface de l'interface ICredentials à partir de la classeNetworkCredential en utilisant le nom d'utilisateur et le mot de passe spécifiés. Ensuite, vous faites un appel à une méthode de contrat WCF qui accepte l'interface ICredentials en tant qu'argument. Vous recherchez une fois que vous effectuez un cast de l'interface ICredentials qui sont reçus dans le service WCF à une information d'identification du réseau, la propriété de mot de passe conserve une chaîne vide. La propriété Usernameest toutefois, tout en maintenant une valeur correcte et valide.
Cause
Il s'agit d'un problème connu qui a été introduit dans le Microsoft.NET Framework 4.0 lors d'une nouvelle propriété, SecurePassword, a été ajoutée à la classe NetworkCredential. Cette propriété remplace la chaîne de mot de passe d'origine lorsque la propriété SecurePassword est désérialisée sur le côté du service. La propriété SecurePasswordest de type SecureString. Par sa conception, il n'est pas sérialisé et envoyé. Cependant, il remplace la chaîne de mot de passe d'origine à l'aide d'une valeur vide. Ce comportement est également à la conception.
Résolution
Pour résoudre ce problème, vous devez passer les informations de nom d'utilisateur et le mot de passe au service indépendamment des informations d'identification réseau. Pour cela, en créant un objet défini par l'application pour stocker les informations d'identification et de passer les informations d'identification à une nouvelle méthode de service WCF qui accepte l'objet sous la forme d'un argument de méthode. Dans la mesure où cet objet défini par l'application contient des informations sensibles, werecommend que les données envoyées sur une connexion chiffrée au service WCF à l'aide soit https ou transport sécurité sécurité de couche de message.
Plus d'informations
La followingexample indique un service WCF qui reproduit le problème. Le service WCF a le contrat suivant :

[ServiceContract]
[ServiceKnownType(typeof(NetworkCredential))]
interface publique Ile
{

[OperationContract]
chaîne GetData(ICredentials value) ;
}

Un client utilise le service comme suit :

iCredService.ServiceClient svcClient = iCredService.ServiceClient() nouvelle ;
ICred de l'interface ICredentials = nouveau System.Net.NetworkCredential (« ABC », « 1234 ») ;
Résultat de la chaîne = résultat = svcClient.GetData(iCred) ;

À l'aide de Visual Studio et définir un point d'arrêt au niveau du service à la valeur. Mot de passe est vide. Lorsque vous examinez les fenêtres variables locales de Visual Studio de Microsoft, vous voyez le texte suivant :

-value{System.Net.NetworkCredential}System.Net.ICredentials {System.Net.NetworkCredential}
-[System.Net.NetworkCredential]{System.Net.NetworkCredential}System.Net.NetworkCredential
Domaine « chaîne »
Mot de passe « chaîne »
+SecurePassword{System.Security.SecureString}System.Security.SecureString
Chaîne de nom d'utilisateur « ABC »
Implémentation ICredentials NetworkCredential SecurePassword WCF

Avertissement : Cet article a été traduit automatiquement.

Propriétés

ID d'article : 3082119 - Dernière mise à jour : 08/28/2015 19:14:00 - Révision : 1.0

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

  • kbmt KB3082119 KbMtfr
Commentaires