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