Páginas filhas
  • LGX - Recuperando e usando Token de um aplicativo/acesso externo


Em muitas requisições REST, existem requisitos de autenticação usando TOKEN, ao invés de BASIC AUTH, OAUTH1, OAUTH2, etc.  Abaixo segue um exemplo onde é feita a recuperação de token de autenticação que é na sequencia utilizado como informação de HEADER nas requisições subsequentes:


Exemplo
DEFINE l_rest_refer   VARCHAR(10),
       l_json_refer   VARCHAR(10),
       l_result_rest  TEXT,
       l_status       SMALLINT
       l_header       VARCHAR(5000),
       l_body         VARCHAR(5000),
       l_accessToken  CHAR(1000),
       l_message      CHAR(1000)

########## RECUPERAÇÃO DE TOKEN DE AUTENTICAÇÃO ##########

# Cria o componente para requisições REST.
LET l_rest_refer = _ADVPL_create_component(NULL,"LREST")

# Define o endereço base das requisições.
CALL _ADVPL_set_property(l_rest_refer,"HOST","https://<host>")

#Montar o conteúdo do HEADER e BODY necessários para recuperação de TOKEN, 
#conforme estiver especificado na documentação da API REST para obtenção do TOKEN de autenticação
LET l_header = '{"Content-Type: application/x-www-form-urlencoded"}'
LET l_body   = 'client_id=EC5TFE42-FB10-4CF2-A20B-B92525B71F6C&client_secret=secret&grant_type=client_credentials&scope=api1'
LET l_status = _ADVPL_get_property(l_rest_refer,"POST","/<apiTokenPath>",l_header,l_body)


IF l_status THEN
    LET l_result_rest = _ADVPL_get_property(l_rest_refer,"RESULT")

    call conout("POST RESULT REST: " || l_result_rest)

    IF l_result_rest <> " " THEN
	    LET l_json_refer  = _ADVPL_create_component(NULL,"LJSONOBJECT")
        LET l_status      = _ADVPL_get_property(l_json_refer,"ACTIVATE",l_result_rest)
        LET l_accessToken = _ADVPL_get_property(l_json_refer,"VALUE","access_token")
 	    CALL _ADVPL_set_property(l_json_refer,"DEACTIVATE")
        CALL _ADVPL_destroy_component(l_json_refer)
        CALL CONOUT("TOKEN RESULT = "||l_accessToken CLIPPED)
    ELSE
         CALL CONOUT("TOKEN NOT FOUND")
    END IF
ELSE
    CALL CONOUT("POST TOKEN ERROR: "||_ADVPL_get_property(l_rest_refer,"ERROR_MESSAGE"))
END IF
CALL _ADVPL_destroy_component(l_rest_refer)   


#Se o Token foi recuperado com sucesso
IF l_accessToken <> " " THEN

    ########## REQUISIÇÃO UTILIZANDO TOKEN OBTIDO ##########

    # Cria o componente para requisições REST.
    LET l_rest_refer = _ADVPL_create_component(NULL,"LREST")

    # Define o endereço base das requisições.
    CALL _ADVPL_set_property(l_rest_refer,"HOST","https://<host>")

    #Monta conteúdo do HEADER com a chave TOKEN recuperada anteriormente
    LET l_header = '{ "Content-Type: application/json", "Authorization: Bearer ',l_accessToken CLIPPED,'" }'

    # Método GET.
    CALL _ADVPL_get_property(l_rest_refer,"GET","/<RequestApiPath>",l_header CLIPPED)
    LET l_result_rest = _ADVPL_get_property(l_rest_refer,"RESULT")

    LET l_status  = _ADVPL_get_property(l_rest_refer,"STATUS")
    CALL conout("STATUS = "||l_status CLIPPED)
    CALL conout("API GET RESULT = "||l_result_rest CLIPPED)

    # Ao finalizar o uso, libera o componente da memória.
    CALL _ADVPL_destroy_component(l_rest_refer)
END IF   
  


(seleção) Atente para a documentação descrita nos métodos de recuperação de TOKEN e também nos métodos de requisição REST que fazem uso do TOKEN, para avaliar as chaves enviadas em cada seção da requisição necessárias para o correto funcionamento.