Fwauthentication

Alguém ja utilizou o método FWAUTHENTICATION (padrao no pacote de serviços WS SOAP do protheus) para gerar tokens? Se sim, tem algum exemplo de como utilizar?

Vi que ele autentica com um usuário e senha cadastrado no configurador, porém não estou sabendo usar este método.

Olá,

Esse WS permite autenticar com usuário e senha e gerar um token, com esse token você consegue consumir os demais serviços SOAP, enviando o mesmo no header.

Abaixo um exemplo bem simples e resumido de sua utilização:


//-------------------------------------------------------------------
/*{Protheus.doc} u_soapToken
Exemplo de SOAP com a geração de token para autenticação

@author Daniel Mendes
@since 23/08/2022
@version 1.0
*/
//-------------------------------------------------------------------
user function soapToken()
local oDictionary as object
local oToken as object
local oXML as object
local cTokenResponse as character
local cError as character
local cWarning as character

oToken := TWsdlManager():New()

//Geração do token
oToken:ParseURL("http://localhost:8080/ws/FWAUTHENTICATION.apw?WSDL")
oToken:SetOperation("TOKEN")

oToken:SetValue(0, "password")
oToken:SetValue(3, "admin")
oToken:SetValue(4, " ")

oToken:SendSoapMsg()

cError := ""
cWarning := ""

cTokenResponse := oToken:GetSoapResponse()
oXml := XmlParser(cTokenResponse, "_", @cError, @cWarning )

FWFreeVar(@oToken)

oDictionary := WSFWDICTIONARY():New()

if oDictionary:_HEADOUT == nil
    oDictionary:_HEADOUT := {}
endif

aAdd(oDictionary:_HEADOUT, "Authorization: Bearer " + oXml:_SOAP_ENVELOPE:_SOAP_BODY:_TOKENRESPONSE:_TOKENRESULT:_ACCESS_TOKEN:Text)

oDictionary:cTABLEFILTER := "SED"
oDictionary:GETTABLELIST()

VarInfo("TableList", oDictionary:oWSGETTABLELISTRESULT)

FreeObj(@oDictionary)
FreeObj(@oXML)

return

Na documentação de configuração do SOAP, existe um outro exemplo um pouco maior e mais explicativo caso você precise:

https://tdn.totvs.com/display/framework/Configurar+Portais+e+Webservices

Documentação da implementação:

https://tdn.totvs.com/pages/viewpage.action?pageId=567757105

Obrigado pela orientação Daniel. Vou fazer uns testes!!!