none
Problema ao consumir WebService com autenticação preemptiva RRS feed

  • Pergunta

  • Olá, estou tenho um problema para consumir um webservice, não estou conseguindo autenticar. Quando tento pelo SoapUI funciona, porém só se marcar autenticação preemptiva (pre-emptively), e estou tentando implementar isso, porém não estou tendo sucesso.

    Após captura dos pacotes no Wireshark foi possível verificar que o authorization não está sendo enviado, sendo que o comando preautentication foi setado como true.



    • Editado UilRod sábado, 14 de abril de 2018 00:07 Atualização do Problema
    segunda-feira, 2 de abril de 2018 17:19

Respostas

  • Boa tarde,

    Por falta de retorno essa thread está encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 2 de maio de 2018 22:03
    Moderador

Todas as Respostas

  • Olá bom dia amigo!

    Tente criando o Binding manualmente, ex:

    //Monta o binding WSHttpBinding binding = new WSHttpBinding(); binding.Security.Mode = SecurityMode.Transport; binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; binding.Name = "BINDING_NAME"; binding.CloseTimeout = TimeSpan.FromMinutes(10); binding.OpenTimeout = TimeSpan.FromMinutes(10); binding.ReceiveTimeout = TimeSpan.FromMinutes(10); binding.SendTimeout = TimeSpan.FromMinutes(10); binding.BypassProxyOnLocal = false; binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard; binding.MaxBufferPoolSize = 524288; binding.MaxReceivedMessageSize = 100000000; binding.MessageEncoding = WSMessageEncoding.Text; binding.TextEncoding = Encoding.UTF8; binding.UseDefaultWebProxy = true; binding.AllowCookies = false; binding.TransactionFlow = true; binding.ReliableSession.Enabled = true; //URL SERVIÇO EndpointAddress endereco = new EndpointAddress("url_servico"); var channel = new ChannelFactory<INTERFACE_SEU_SERVICO>(binding, endereco);

    //INSERINDO CREDENCIAIS var credentialBehaviour = channel.Endpoint.Behaviors.Find<ClientCredentials>(); credentialBehaviour.UserName.UserName = "SEU_LOGIN"; credentialBehaviour.UserName.Password = "SUA_SENHA"; INTERFACE_SEU_SERVICO service = channel.CreateChannel();

    //CONSUMINDO SERVIÇO usuarioNotificacaoIn inObj = new usuarioNotificacaoIn(); usuarioNotificacaoOut outObj = new usuarioNotificacaoOut(); inObj.codUo = CodUo; inObj.cpf = CPF; inObj.email = Email; inObj.nome = Nome; inObj.telefone = Telefone; outObj = service.cadastrarUsuario(inObj); channel.Close();

    Um abraço!




    terça-feira, 3 de abril de 2018 13:11
  • Olá Edson, primeiramente muito obrigado pela atenção...

    Eu acreditava que estava enviando usuário e senha errado, porém pelos pacotes capturados no wireshark eu não estou enviando o Authorization no header e pelo SoapUI só funciona com autenticação preemptiva.

    Por ser algo que eu não domino eu to estudando ainda, tentando entender e programar uma comunicação desse tipo. Mesmo que eu consiga enviar o Authorization no header, ainda teria de entender como funciona esse envelopamento, pq pelo tráfego que eu monitorei ta bem diferente do SoapUI, teria de arrumar isso também.

    Com o WSHttpBinding não esta dando certo, acredito que devido a versão do SOAP. Tentei com o BasicHttpBinding e surgiu um outro problema, se eu setar o security mode a nível de transpot ele pede conexão HTTPS então tentei TransportCredentialOnly...

                //Monta  o binding            
                BasicHttpBinding binding = new BasicHttpBinding();
                binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly ;
                binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
                binding.Name = "BINDING_NAME";
                binding.CloseTimeout = TimeSpan.FromMinutes(10);
                binding.OpenTimeout = TimeSpan.FromMinutes(10);
                binding.ReceiveTimeout = TimeSpan.FromMinutes(10);
                binding.SendTimeout = TimeSpan.FromMinutes(10);
                binding.BypassProxyOnLocal = false;
                binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
                binding.MaxBufferPoolSize = 524288;
                binding.MaxReceivedMessageSize = 100000000;
                binding.MessageEncoding = WSMessageEncoding.Text;
                binding.TextEncoding = Encoding.UTF8;
                binding.UseDefaultWebProxy = true;
                binding.AllowCookies = false;
                //binding.TransactionFlow = true;
                //binding.ReliableSession.Enabled = true;
    
                //URL SERVIÇO
                EndpointAddress endereco = new EndpointAddress("endereço wsdl");
                var channel = new ChannelFactory<apiPushServiceChannel>(binding, endereco);
    
                //INSERINDO CREDENCIAIS
                var credentialBehaviour = channel.Endpoint.Behaviors.Find<ClientCredentials>();
                credentialBehaviour.UserName.UserName = "login";
                credentialBehaviour.UserName.Password = "senha";
                apiPushService service = channel.CreateChannel();
    
                //CONSUMINDO SERVIÇO
                usuarioNotificacaoIn inObj = new usuarioNotificacaoIn();
                usuarioNotificacaoOut outObj = new usuarioNotificacaoOut();
    
                inObj.codUo = CodUo;
                inObj.cpf = CPF;
                inObj.email = Email;
                inObj.nome = Nome;
                inObj.telefone = Telefone;
    
                cadastrarUsuario cad = new cadastrarUsuario(inObj);
                service.cadastrarUsuario(cad);
                channel.Close();

    TransactionFlow e ReliableSession tbm foram desativados e fiz umas modificações na parte final, não estou nem pegando uma resposta, apenas monitorando para ver o que sai, mas infelizmente não avancei muito.


    • Editado UilRod quarta-feira, 4 de abril de 2018 03:27 ajuste/formação do texto
    quarta-feira, 4 de abril de 2018 03:25
  • Bom dia amigo,

    Se tiver o link do webservice com os parametros de envio posso te auxiliar melhor.

    Abraço!

    quarta-feira, 4 de abril de 2018 11:19
  • Boa tarde,

    Por falta de retorno essa thread está encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 2 de maio de 2018 22:03
    Moderador