Usuário com melhor resposta
Webservice com autenticação SOAP - Internal Error (from server)

Pergunta
-
Tenho de aceder a um webservice externo, de outra empresa. Mas esse webservice requer autenticação e é a primeira vez que me deparo com esta situação.
Eles dizem o seguinte na especificação técnica:
"As credenciais de acesso ao serviço (
login e password) devem ser incluídas no cabeçalho WS-Security (http://docs.oasis-open.org/wss/2004/01/oasis-200401-wsswssecurity-secext-1.0.xsd) do serviço, para efeitos de autenticação e autorização da entidade invocadora no servidor de LDAP da empresa."
Tenho tentado passar as credenciais usando o seguinte código, antes de invocar o método que pretendo usar:
myProxy.PreAuthenticate = True
Dim cache As New CredentialCache
Dim NetC As New NetworkCredential("", "")
NetC.UserName = "XXXXX"
NetC.Password = "XXXXXXXXXXXXXXXXXXXXXX"
cache.Add(New Uri(myProxy.Url), "Basic", NetC)
myProxy.Credentials = cache
myProxy.ConnectionGroupName = "XXXXX"
Eu sei que o NetworkCredential também pode ser usado com o parametro "Domain", mas sinceramente acho que não tenho esse dado.Ao executar isto dá sempre: "Internal Error (from server)"
Entretanto usei o SOAPUI para testar o webservice e de facto se passar o user o password, consigo resposta do webservice.
Para além disso eles forneceram um XML de exemplo:
<soapenv:Envelope xmlns:con=http://xmlnssns.empresa.pt/Consultaxmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-6"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Username>USERNAME</wsse:Username>
<wsse:Password
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">PASSWORD</wsse:Password>
<wsse:Nonce
EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">ENZLxcFTaaJvENVNKTp6Fg==</wsse:Nonce>
<wsu:Created>2011-02-03T15:46:23.035Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
<con:Consulta_Input>
<con:Numero>0000000000</con:Numero>
<con:CodigoEntidade>PASSWORD</con:CodigoEntidade>
</con:Consulta_Input>
</soapenv:Body>
</soapenv:Envelope>
Desde já obrigada!
Respostas
-
Boa tarde CristinaR2,
Tente trocar
myProxy.Credentials = cache
por:
myProxy.Credentials = NetC
Ou passar as credenciais direto para o proxy:
myProxy.Credentials = new NetworkCredential("NOME_USUARIO", "PASSWORD");
Em caso negativo poderia me passar o wsdl do serviço? Irei fazer alguns testes e verificar alguma possivel customizaçao no consumo na parte de autenticaçao e posto o codigo com a soluçao para voce.
Atenciosamente
Rafael de Camillis Tairum
MCPD Enterprise Application Developer 3.5 , Comptia+ TTT
Blog: http://dicamillis.wordpress.com- Sugerido como Resposta AndreAlvesLimaModerator domingo, 25 de setembro de 2011 07:50
- Marcado como Resposta Eder CostaModerator quinta-feira, 22 de dezembro de 2011 12:23
Todas as Respostas
-
Boa tarde CristinaR2,
Tente trocar
myProxy.Credentials = cache
por:
myProxy.Credentials = NetC
Ou passar as credenciais direto para o proxy:
myProxy.Credentials = new NetworkCredential("NOME_USUARIO", "PASSWORD");
Em caso negativo poderia me passar o wsdl do serviço? Irei fazer alguns testes e verificar alguma possivel customizaçao no consumo na parte de autenticaçao e posto o codigo com a soluçao para voce.
Atenciosamente
Rafael de Camillis Tairum
MCPD Enterprise Application Developer 3.5 , Comptia+ TTT
Blog: http://dicamillis.wordpress.com- Sugerido como Resposta AndreAlvesLimaModerator domingo, 25 de setembro de 2011 07:50
- Marcado como Resposta Eder CostaModerator quinta-feira, 22 de dezembro de 2011 12:23
-
Boa tarde,
estou com o mesmo problema, e se não me engano é para o uso do mesmo Web Service.
Experimentei a sugestão do Rafael mas não funcionou.
Este é o meu código, basicamente o mesmo que da CristinaR2 mas com as alterações sugeridas.
proxy conut = new proxy (); conut.PreAuthenticate = true; conut.Credentials = new NetworkCredential("XXXXXXXXXX", "XXXXXXXXXXXX"); cuoutput = conut.process(param);
Obrigado desde já
Bruno Henriques