Falha na autenticação de serviço SOAP release 2410

Olá pessoal, bom dia!

Tudo bem com vocês? Espero que sim.

Nós migramos o nosso Protheus da base de testes para a release 12.1.2410 e estamos efetivando os testes pertinentes a migração. Agora, eu me deparei com a seguinte questão:

Ao tentar realizar a autenticação de meu serviço SOAP, está sendo apresentado a seguinte mensagem: “AUTHENTICATION: USER NOT AUTHORIZED”, mesmo se eu passar a senha do admin, ou não passar nenhuma senha.

Eu ouvi falar que agora existe algum parâmetro que faz essa autenticação, mas infelizmente não consegui encontrá-lo.

Por favor, poderiam me ajudar?

2 curtidas

Olá,

O SOAP passou a ter sua autenticação obrigatório no release 12.1.2410, a autenticação do mesmo já existia, porém era permitido desligar via a chave Security.

Para autenticar no SOAP, você deve enviar os dados de autenticação no header Authorization, sendo que o SOAP aceita autenticação basic e bearer.

Nessa documentação, existem dois exemplos de geração e consumo da autenticação bearer:
https://tdn.totvs.com.br/display/framework/Configurar+Portais+e+Webservices

Para utilizar o basic, o exemplo mudaria muito pouco, você teria de enviar o usuário e senha em base 64:

oWsdl:AddHttpHeader("Authorization", "Basic" + Encode64("MeuUsuário" + ":" + "MinhaSenha") )

Documentações:
DFRM1-35680 DT Bloqueio de REST e SOAP sem security - Frameworksp - TDN
DFRM1-24091 DT Autenticação do tipo Bearer Token no webservice Soap do Protheus - Frameworksp - TDN

3 curtidas

Muito obrigado pelo retorno!

Eu estou tentando fazer a autenticação via SOAP UI para fazer os testes e enviando as credenciais via “Basic”, mas mesmo assim estou recebendo o retorno em questão.

Vou procurar ver essa questão da base 64.

Julio, boa tarde. Você conseguiu resolver? Estou com o mesmo problema.

Bom dia!

Meu colega conseguiu resolver, ele fez assim:

var headers = new java.util.HashMap();
headers.put(“Authorization”, java.util.Collections.singletonList(authHeader));

		customClient.getRequestContext().put(
			    "javax.xml.ws.http.request.headers",
			    headers
			);

Daniel, estou enfrentando este mesmo problema, mas como eu posso enviar os dados de autenticação Basic no header HTTP sem utilizar a classe TWsdlManager, mas sim algo dentro do WSCLIENT?

Eu tenho esse exemplo aqui embaixo e nao consigo ver uma maneira onde posso popular o header HTTP para realizar Authenticator Basic neste código…

WSMETHOD VALIDAUSUARIO WSSEND oWSGETVALIDACAO WSRECEIVE oWSVALIDAUSUARIORESULT WSCLIENT WS_WORKFLOW
Local cSoap := "" , oXmlRet

BEGIN WSMETHOD

cSoap += '<VALIDAUSUARIO xmlns="http:/localhost:8080/">'
cSoap += WSSoapValue("GETVALIDACAO", ::oWSGETVALIDACAO, oWSGETVALIDACAO , "_STRUCTLOGIN", .T. , .F., 0 , NIL, .F.) 
cSoap += "</VALIDAUSUARIO>"

oXmlRet := SvcSoapCall( Self,cSoap,; 
    "http://localhost:8080/VALIDAUSUARIO",; 
    "DOCUMENT","http://localhost:8080/",,"1.031217",; 
    "http://localhost:8080/WORKFLOW.apw")

::Init()
::oWSVALIDAUSUARIORESULT:SoapRecv( WSAdvValue( oXmlRet,"_VALIDAUSUARIORESPONSE:_VALIDAUSUARIORESULT","_STRUCTRET",NIL,NIL,NIL,NIL,NIL,NIL) )

END WSMETHOD

oXmlRet := NIL
Return .T.

Desde já agradeço!

1 curtida