none
Webservice com autenticação SOAP - Internal Error (from server) RRS feed

  • 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!

    segunda-feira, 22 de agosto de 2011 08:04

Respostas

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
    sábado, 24 de setembro de 2011 15:51
  • 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

    quinta-feira, 5 de janeiro de 2012 19:06