Dados de palavra-passe de ICredentials não não possível passar de um cliente WCF ao serviço WCF no 4.5 de Framework .NET

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 3082119
Sintomas
Um cliente de Windows Communication Foundation (WCF), crie uma nova interface de ICredentials da classeNetworkCredential utilizando o nome de utilizador e palavra-passe que são especificados. Em seguida, efectue uma chamada para um método de contrato WCF que tenha ICredentials como um argumento. Encontra-se que, depois de converter o ICredentials que são recebidos no serviço WCF para uma credencial de rede, a propriedade de palavra-passe contém uma cadeia vazia. No entanto, a propriedade Usernameainda possui um valor válido, o correcto.
Causa
Este é um problema conhecido que foi introduzido no Microsoft .NET Framework 4.0 quando uma nova propriedade, SecurePassword, foi adicionado à classe NetworkCredential. Esta propriedade substitui a cadeia de palavra-passe original quando a propriedade SecurePassword é anular a serialização do lado do serviço. A propriedade SecurePasswordé do tipo SecureString. Por predefinição, não é serializado e enviado. No entanto, substitui a cadeia de palavra-passe original, utilizando um valor vazio. Este comportamento também ocorre por predefinição.
Resolução
Para corrigir este problema, tem de passar as informações de nome de utilizador e palavra-passe para o serviço independentemente das credenciais de rede. Pode fazê-lo através da criação de um objecto definido pela aplicação para guardar as credenciais e transmitir as credenciais para um novo método de serviço WCF que aceita o objecto como um argumento do método. Dado que este objecto definido pela aplicação contém informações importantes, werecommend que os dados enviados através de uma ligação encriptada ao serviço WCF utilizando o https de transporte de segurança ou segurança de camada de mensagem.
Mais Informação
O followingexample mostra um serviço do WCF que reproduz o problema. O serviço WCF tem o seguinte contrato:

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

[OperationContract]
cadeia GetData(ICredentials value);
}

Um cliente está a utilizar o serviço do seguinte modo:

iCredService.ServiceClient svcClient = iCredService.ServiceClient() novo;
ICredentials iCred = System.Net.NetworkCredential nova ("ABC", "1234");
Resultado da cadeia = resultado = svcClient.GetData(iCred);

Utilizando o Visual Studio e a definição de um ponto de interrupção no serviço do valor. Palavra-passe estará vazia. Quando examinar o Microsoft Visual Studio locais do windows, verá o seguinte texto:

-value{System.Net.NetworkCredential}System.Net.ICredentials {System.Net.NetworkCredential}
-[System.Net.NetworkCredential]{System.Net.NetworkCredential}System.Net.NetworkCredential
Domínio"cadeia"
Palavra-passe"cadeia"
+SecurePassword{System.Security.SecureString}System.Security.SecureString
Cadeia de caracteres do nome de utilizador "ABC"
ICredentials NetworkCredential SecurePassword WCF

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 3082119 - Última Revisão: 08/28/2015 19:17:00 - Revisão: 1.0

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

  • kbmt KB3082119 KbMtpt
Comentários