Histórico da Página
Informações | ||
---|---|---|
| ||
Disponível a partir da versão build: 19.3.1 e superioresdo appserver. |
A declaração de valor desta key da tlppdata é obrigatório, caso declarado ""(em branco) ou null, ocorrerá erro tanto no momento da requisição dos tokens quanto na validação de acesso a API.
Essa função é utilizada tanto no momento de gerar os tokens quanto na validação de acesso pois deve conter os dados principais de acesso dos clientes(usuário e senha), bem como os dados para compor o secret dos tokens.
Aqui também é possível definir o tempo de validade(expires in), tanto do access token, quanto do refresh_token.
...
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.
Informações importantes
As propriedades declaradas abaixo sempre devem ter os seus valores incrementados a partir da execução deste ponto de entrada.
Propriedade Tipo Descrição Exemplo de utilização client_id Char Identificação do cliente dentro da corporação "_1xpto124324523@3" client_secret Char Chave secreta para composição do token "asdja$d#als!54w5tf@akl" username Char Nome do usuário "nomedousuario" password Char Senha do usuário "teste123987155asd" grant_type Char Devido ao modelo implementado o valor deve "password" "password" access_expires Int Tempo de validade do token de acesso em milissegundos 3600 refresh_expires Date Data de validade do refresh token 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.
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âmetro Tipo Descrição Obrigatório jParams JsonObject Objeto do tipo Json que contem os parâmetros enviados na URI de solicitação do access token X
...
Não é esperado pelo core nenhum tipo de retorno pelo fato do parâmetro inicial jParams ter sido passado por referência.
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álidado.
Utilização
Exemplo de aplicação com apenas 1 usuário fixo e propriedades carregadas a partir das #defineExemplo de aplicação:
Bloco de código | ||||
---|---|---|---|---|
| ||||
#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' User functionFunction 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: "2021mm/12dd/31yyyy" -> "JWTRoutes" : {}; //parametro opcional momentâneamente."12/31/2021" } //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],'')}) //Obs*: No processo acima estão sendo apenas adicionados propriedades que não existem, mas caso seja necessário sempre substituir, é só mudar a lógica acima. Return | ||||
Informações | ||||
| ||||
Return .T. |
Informações | ||
---|---|---|
| ||
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 | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#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 jTlppParams := JSonObject():New()
local cTlppParams := '{'+;
'"client_id":"'+_rest_oAuth2_client_id+'",'+;
'"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)
Propriedade | Tipo | Descrição | Exemplo de utilização |
---|---|---|---|
client_id | Char | Identificação do cliente dentro da corporação | "_1xpto124324523@3" |
client_secret | Char | Chave secreta para composição do token | "asdja$d#als!54w5tf@akl" |
username | Char ou Array de Objetos | Nome do usuário | "nomedousuario" ou "users": [ { "username": "nomedousuario", "password": "teste123987155asd" }, { "username": "nomedooutrousuario", "password": "teste7859557aae" }, .... |
password | Char ou Array de Objetos | Senha do usuário | "teste123987155asd" ou "users": [ { "username": "nomedousuario", "password": "teste123987155asd" }, { "username": "nomedooutrousuario", "password": "teste7859557aae" }, .... |
grant_type | Char ou Array de Objetos | Devido ao modelo implementado o valor deve "password" | "password" ou "types": [ { "grant_type": "password" }] |
access_expires | Int ou Array de Objetos | Tempo de validade do token de acesso em milissegundos | 3600 ou "expires": [ { "access_expires": 3600, "refresh_expires": "Date()+1" }] |
refresh_expires | Date ou Array de Objetos | Data de validade do refresh token | Date() ou "expires": [ { "access_expires": 3600, "refresh_expires": 12/31/2022" }] |
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
{
"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"
}
],
} |
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#include "tlpp-core.th"
Function U_flexibleParamsProvider()
local jTlppParams := JSonObject():new()
local cStringToJson := '{"client":[{"client_id": "7LpPC0r3","client_secret": "TlPp#S3cre7@"}],'+;
'"expires":[{"access_expires": 3600,"refresh_expires": "Date()+1"}],'+;
'"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.