Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Informações
titleAbrangência

Disponível a partir da versão build: 19.3.1 e superioresdo appserver.

Definição

Essa função tem a responsabilidade de carregar as propriedades que serão utilizadas posteriormente tanto na geração dos tokens(access/refresh), quanto na validação do acesso, sendo a sua declaração e existência da função responsável obrigatória.

...

  • As propriedades declaradas abaixo sempre devem ter os seus valores incrementados a partir da execução deste ponto de entrada.

    PropriedadeTipo DescriçãoExemplo de utilização
    client_idCharIdentificação do cliente dentro da corporação"_1xpto124324523@3"
    client_secretCharChave secreta para composição do token"asdja$d#als!54w5tf@akl"
    usernameChar/ArrayNome do usuário"nomedousuario"
    passwordChar/ArraySenha do usuário"teste123987155asd"
    grant_typeCharDevido ao modelo implementado o valor deve "password""password"/"refresh_token"
    access_expiresIntTempo de validade do token de acesso em milissegundos360003600
    refresh_expiresChar/DateData de validade do refresh token"mm/dd/yy" | "mm/dd/yy" | Date() | "  ou 'Date()+1"'
  • No endpoint responsável pela solicitação dos tokens, os parâmetros username e password devem sempre ser informados no momento da requisição, pois são necessários para a composição do acess token e refresh token.
  • Neste EntryPoint devem ser implementadas todas as lógicas de obtenção dos parâmetros necessários e validação dos parâmetros enviados na requisição, no caso em específico: username e password. em como como quando não houver.
  • O TlppCore disponibiliza um parâmetro inicial que é  passado por referência,  nele se encontram os valores dos parâmetros que foram passados na URI de solicitação de token para que a função possa fazer o trabalho necessário de armazenamento e validação das informações:

    ParâmetroTipoDescriçãoObrigatório
    jParamsJsonObjectObjeto do tipo Json que contem os parâmetros enviados na URI de solicitação do access tokenX
    Bloco de código
    languagejs
    titleModelo JSON
    linenumberstrue
    collapsetrue
    { "client_id": "7LpPC0r3", "client_secret": "TlPp#S3cre7@", "expires": [ { "access_expires": 3600, "refresh_expires": "Date()+1" } ], "users": [ { "username": "7LpPC0r3o@u7h2", "password": "P@s5w0rD&7LpPC0r3" }, { "username": "tlppCore", "password": "Senha1234" }, { "username": "Pr0ba7", "password": "Senh@D3T3ste" } ], "types": [ { "grant_type": "password" } ], }

Observações

  • Pelo fato de o TlppCore ser um framework independente do produto, optamos por não guardar essas informações em nossa camada, portanto esse EntryPoint  é de total responsabilidade do utilizador, bem como a sua lógica.
  • É imprescindível que as propriedades possuam os mesmos nomes e tipos conforme informado no quadro do tópico acima: Informações importantes.
  • Quando é recebida uma solicitação de acesso, o fluxo de validação passará por este EntryPoint, deve-se ficar atento para o desenvolvimento desta rotina, uma vez que todas as propriedades devem ser carregadas para que o token recebido seja válidoválidado.

Utilização

Exemplo de aplicação com apenas 1 usuário fixo e propriedades carregadas a partir das #define:

...

Bloco de código
languagecpp
titleFunção de Parametrização
#include "tlpp-core.th"

#define cliente_secret_ 'secret'
#define cliente_access_expires 3600
#define cliente_refresh_expires Date()+1
#define cliente_id 'clienteId'
#define cliente_oAuth2_user 'nomedoUsuario'
#define cliente_oAuth2_password 'passworddoUsuario'

UserFunction function u_paramsProvider(jParams)

local jCliente := {;
    "client_id" : client_id , ; // string
    "client_secret" : cliente_secret,; // string
    "username" : cliente_oAuth2_user ,; // string
    "password" : cliente_oAuth2_password  ,; // string
    "grant_type" : "password",; //string este conteúdo deve ser fixo por enquanto
    "access_expires" : 3600,; //integer tempo em milissegundos
    "refresh_expires" : Date() + 1,;// ou para o caso de data fixa, o formato de data: "mm/dd/yyyy" -> "12/31/2021"
    "JWTRoutes" : {}; //parametro opcional momentâneamente.
    }

  //obtendo as propriedades da variável JSon criadas acima para poder popular o objeto nativo jParams que é passado por referencia.  
  local aProps := jCliente:GetNames()


  //Adicionando as propriedades não existentes no objeto nativo jParams
  //Aqui deve-se ficar atento para que todas as propriedades tenham os seus valores carregados, mesmo quando não estejam presentes no objeto recebido(jParams).
  aEval(aProps,{|x,y| iIf(!(jParams:hasProperty(x)), jParams[x] := jCliente[x],'')})
  
 Return

...

 .T.



Informações
titleDisponibilidade

A partir da build: 20.3.1.0 do Appserver foram efetuadas algumas mudanças neste entry point conforme seguem.


1 - Os parâmetros vindos da requisição não são enviados para este entry point e torna-se obrigatório o retorno dos parâmetros do cliente em formato JSON:

Bloco de código
languagecpp
firstline1
titleFunção de Parametrização com JsonU_ParamsProvider
linenumberstrue
#include "tlpp-core.th"

#define _rest_oAuth2_secret_ 'secret_do_cliente'
#define _rest_oAuth2_access_expires 3600(ou a quantidade de tempo em segundos quem um access token deve expirar) 
#define _rest_oAuth2_refresh_expires 'Date()+1'
#define _rest_oAuth2_client_id 'id_do_cliente'
#define _rest_oAuth2_user 'nome_do_username'
#define _rest_oAuth2_password 'senha_do_username'

Function u_paramsProvider()

  local jTlppParamsUser function flexibleParamsProvider(jParams) 

  local jClientParams := JSonObject():newNew()
  local cStringToJsoncTlppParams := '{'+;
    '"client_id":[{""'+_rest_oAuth2_client_id": "7LpPC0r3","client_secret": "TlPp#S3cre7@"}]+'",'+;
    '"client_secret":"'+_rest_oAuth2_secret_+'",'+;
    '"username":"'+_rest_oAuth2_user+'",'+;
    '"password":"'+ _rest_oAuth2_password+'",'+;
    '"access_expires":'+cValToChar(_rest_oAuth2_access_expires)+','+;
    '"refresh_expires":"'+_rest_oAuth2_refresh_expires+'",'+;
    '"grant_type" : "password"'+;
      ''}'

  jTlppParams:fromJson(cTlppParams)

Return jTlppParams


2 - Será possível a utilização de um JSON contendo os parâmetros para criação e validação dos tokens (access / refresh)

PropriedadeTipo DescriçãoExemplo de utilização
client_idCharIdentificação do cliente dentro da corporação"_1xpto124324523@3"
client_secretCharChave secreta para composição do token"asdja$d#als!54w5tf@akl"
usernameChar ou Array de ObjetosNome do usuário

"nomedousuario" ou "users": [

{ "username": "nomedousuario", "password": "teste123987155asd" },

{ "username": "nomedooutrousuario", "password": "teste7859557aae" },

....
]

passwordChar ou Array de ObjetosSenha do usuário

"teste123987155asd" ou

"users": [

{ "username": "nomedousuario", "password": "teste123987155asd" },

{ "username": "nomedooutrousuario", "password": "teste7859557aae" },

....
]

grant_typeChar ou Array de ObjetosDevido ao modelo implementado o valor deve "password"

"password" ou

"types": [ { "grant_type": "password" }]

access_expiresInt ou Array de ObjetosTempo de validade do token de acesso em milissegundos

3600 ou

"expires": [ { "access_expires":

...

3600, "refresh_expires":

...

"Date()+1" }]

refresh_expiresDate ou Array de ObjetosData de validade do refresh token

Date() ou

"expires": [ { "access_expires": 3600, "refresh_expires": 12/31/2022" }]

Bloco de código
languagejs
titleModelo JSON exemplificando o quadro acima
linenumberstrue
collapsetrue
{
  "client_id": "7LpPC0r3",
  "client_secret": "TlPp#S3cre7@",
  "expires": [
,'+;
       {
      "access_expires": 3600,
      "refresh_expires": "Date()+1"
    }
  ],
  '"users": [
    {
      "username": "7LpPC0r3o@u7h2",
      "password": "P@s5w0rD&7LpPC0r3"
    },'+;
    {
      "username": "tlppCore",
      "password": "Senha1234"
    },
    {
   '{   "username": "tlppCorePr0ba7",
      "password": "Senha1234Senh@D3T3ste"
    },'+;
  ],
  "types": [
    {
      "grant_type": "password"
    }
  ],
 }
Bloco de código
languagecpp
firstline1
titleFlexibleParamsProviders
linenumberstrue
#include "tlpp-core.th"

Function U_flexibleParamsProvider()       

	local jTlppParams := JSonObject():new()
  	local cStringToJson := '{"client":[{"usernameclient_id": "Pr0ba77LpPC0r3","passwordclient_secret": "Senh@D3T3steTlPp#S3cre7@"}],'+;
                         '"typesexpires": [{"grantaccess_typeexpires":"password 3600,"refresh_expires": "Date()+1"}]},'+;
                        //obtendo as propriedades da variável JSon criadas acima para poder popular o objeto nativo jParams que é passado por referencia.  
  local aProps := jCliente:GetNames()


  //Adicionando as propriedades não existentes no objeto nativo jParams
  //Aqui deve-se ficar atento para que todas as propriedades tenham os seus valores carregados, mesmo quando não estejam presentes no objeto recebido(jParams).

  aEval(aProps,{|x,y| iIf(!(jParams:hasProperty(x)), jParams[x] := jCliente[x],'')})
  
 Return '"users":[{"username": "ademir_da_guia","password": "F1t3bol"},'+;
                            '{"username": "mark","password": "Met@vers0"},'+;
                            '{"username": "SebastiaoRodrigues","password": "grand3Tim"}],'+;
                         '"types": [{"grant_type":"password"}],'+;
                         '"username":"josedascouves",'+;
                         '"password":"1234xpto"}'
  
  	jTlppParams:fromJson(cStringToJson)
 
Return jTlppParams


Observações

  • O retorno incorreto dos parâmetros vindos deste entry point invalidarão a requisição
  • O usuário , senha e o grant_type enviados na requisição e validação do access/refresh token devem estar contidos nos parâmetros declarados acima.
  • Por ser um entry point, as informações declaradas neste fonte são de total responsabilidade do desenvolvedor, o TlppCore não guarda nenhum dos dados enviados utilizando-os somente para criação e validação dos tokens, porém o formato do objeto JSON bem como os nomes de suas chaves devem ser respeitadas seguindo o padrões descritos nos quadros acima.