Falha na autenticação de serviço SOAP

Pessoal, bom dia!

Estou com um problema e gostaria da ajuda de vocês.

Tenho um serviço SOAP cadastrado no meu FLUIG que no momento do cadastro, eu coloquei que ele “requer autorização” e inseri as credenciais corretamente, tanto que foi criado o serviço e eu consigo consultar via eclipse.

Contudo, quando vou consumir ele dentro de um dataset do Fluig, ele me retorna uma mensagem indicando que o usuário não está autenticado.

Alguém já enfrentou esse problema? Acredito que possa estar relacionado ao fato dessa autenticação precisar ser em base64.

Tenho que fazer algum ajuste no cadastro do serviço ou tenho que passar esse dado quando eu for consumir o serviço dentro do dataset?

Segue trecho do código abaixo:

properties["disable.chunking"] = "true";
properties["receive.timeout"] = "360000";

var service 			= ServiceManager.getService("WsIpAprovaDocumento");
var serviceHelper		= service.getBean();
var service 			= serviceHelper.instantiate('fluig.WSIPAPROVADOCUMENTO'); 
var request 			= service.getWSIPAPROVADOCUMENTOSOAP();	
var parametros 			= null
var objectFactory		= serviceHelper.instantiate('fluig.ObjectFactory');
var customClient  		= serviceHelper.getCustomClient(request, "fluig.WSIPAPROVADOCUMENTOSOAP", properties);

parametros 		= serviceHelper.instantiate('fluig.WSIPREQUESTRETORNADOCAPROVADORES');

parametros.setNUMERODOCUMENTO(numeroDocumento);
parametros.setTIPODOCUMENTO(tipoDocumento);
parametros.setFILIALDOCUMENTO(filial);

var retorno = customClient.retornadocumentoaprovadores(empresa,filial,parametros);
2 curtidas

@julio.vitor.2013 , esse Webservice Soap é externo?

Olá, boa tarde!

Sim! É do meu Protheus.

Quando você consome pelo SoapUI, onde você passa o usuário e senha? No XML mesmo?

No SOAPUI eu só consegui fazer a autenticação passando no Header, em base64

Tenta fazer da seguinte forma:

properties["disable.chunking"] = "true";
properties["receive.timeout"] = "360000";

var service        = ServiceManager.getService("WsIpAprovaDocumento");
var serviceHelper  = service.getBean();
var service        = serviceHelper.instantiate('fluig.WSIPAPROVADOCUMENTO'); 
var request        = service.getWSIPAPROVADOCUMENTOSOAP();
var objectFactory  = serviceHelper.instantiate('fluig.ObjectFactory');
var customClient   = serviceHelper.getCustomClient(request, "fluig.WSIPAPROVADOCUMENTOSOAP", properties);

// Gera a autenticação Base64
var username = "seu_usuario";
var password = "sua_senha";
var auth = username + ":" + password;
var encodedAuth = Base64.encode(auth);
var authHeader = "Basic " + encodedAuth;

// Adiciona o Header de Autenticação na requisição
customClient.getRequestContext().put("Authorization", authHeader);

var parametros = serviceHelper.instantiate('fluig.WSIPREQUESTRETORNADOCAPROVADORES');

parametros.setNUMERODOCUMENTO(numeroDocumento);
parametros.setTIPODOCUMENTO(tipoDocumento);
parametros.setFILIALDOCUMENTO(filial);

var retorno = customClient.retornadocumentoaprovadores(empresa, filial, parametros);

1 curtida

Gabriel, bom dia!

Eu fiz o que voce sugeriu, mas infelizmente não deu certo! O erro persiste.

Apenas um detalhe, a função Base64.encode(auth) não funcionou. Eu precisei usar assim “var encodedAuth = java.util.Base64.getEncoder().encodeToString(new java.lang.String(auth).getBytes());”

Poderia colocar aqui o XML enviado no SoapUI? Para eu ver como está a estrutura.

POST <endereço requisição> HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: “<endereço> RETORNAAPROVADORES”
Authorization: Basic <autenticacao em base 64>
Content-Length: 616
Host: <Endereço>
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5.5 (Java/17.0.12)