Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

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

...

  • 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 milissegundos36000
    refresh_expiresCharData de validade do refresh token"2022mm/01dd/01yy" ou Date()
  • 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 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álido.

...

Bloco de código
languagecpp
titleFunção de Parametrização
#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'

User 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 deve ser string de data: "2021/12/31"
    "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


Exemplo de aplicação flexível na questão de usuários

Bloco de código
languagecpp
titleFunção de Parametrização com Json
User function flexibleParamsProvider(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 deve ser string de data: "2021/12/31"
    "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

...