O gerenciamento de tokens é um componente fundamental em sistemas que envolvem autenticação e autorização. Um token, nesse contexto, é uma representação de acesso, que pode ser usado para verificar a identidade do usuário e conceder permissões específicas. Eles desempenham um papel crucial na segurança e na eficiência das interações entre usuários e sistemas.


Projetos Cronapp, a partir da versão 2.9.6-SP.40, possuem um recurso automático de invalidação de tokens. Projetos anteriores a essa versão podem ser configurados para utilizar essa funcionalidade. Para mais detalhes desse recurso, consulte a documentação Invalidação de tokens. Logo, não recomendamos o uso desse tutorial, que será mantido apenas para projetos que ainda seguem a estrutura apresentada aqui.


O gerenciamento de tokens também pode ser utilizado para controlar sessões de usuários e impedi-los, por exemplo, de utilizar tokens expirados após efetuar logout. Nas Configurações do projeto do Cronapp é possível determinar o tempo que um token ficará ativo. No entanto, se você desejar criar regras personalizadas, alinhadas com requisitos específicos do seu negócio, este tutorial será de ajuda. Nele será apresentada uma solução para o gerenciamento de sessão de tokens, incluindo a validação desses tokens após login e logout do usuário.

Pré-requisitos

Antes de começar a seguir os passos do tutorial é preciso ter certeza de que se tem um ambiente minimamente preparado para reproduzir o exemplo. Abaixo estão os requisitos principais.

  1. Projeto do tipo web e mobile criado. Caso haja dúvidas de como criar esse tipo de projeto, acesse a documentação Criar projeto.
  2. Utilizar as funcionalidades do diagrama, como criar classes e gerar persistência. Caso haja dúvidas, acesse a documentação Diagrama.
  3. Criar blocos de programação. Caso haja dúvidas, acesse a documentação Bloco de programação.

Passos

Configurando o diagrama

Vamos dar início ao nosso tutorial criando uma nova classe no Diagrama de dados, que será utilizada para armazenar o ID do token, referente a um usuário, e sua validade, determinando se o token é válido ou não. Para começar, siga essas etapas: primeiro expanda o menu do tópico Diagrama de Dados e clique duas vezes no arquivo app (destaque 1 da Figura 1).

Em seguida, crie uma classe, neste exemplo a nomeamos como Session, a qual deve conter dois atributos, id (tipo Texto) e valid (tipo Lógico), conforme a imagem abaixo. Após a criação da classe, gere a camada de persistência (destaque 2). 

Dependendo da sua regra de negócio, recomenda-se que os registros de tokens salvos sejam validados e excluídos após determinado período de tempo, para isso pode-se adicionar na classe, por exemplo, um campo para a data de expiração do token. Não abordaremos esses passos no tutorial para não aumentar a sua complexidade, uma vez que a implementação depende das regras específicas de cada projeto. 


Figura 1 - Classe Session no diagrama de dados

Criando os blocos de programação

Para o gerenciamento de sessão dos tokens durante o login e logout do usuário, é necessário criar algumas funções de blocos de programação do tipo servidor. Essas funções posteriormente serão adicionadas em alguns eventos do projeto. Inicialmente, criamos um arquivo blockly e atribuímos o nome "criarIdParaToken" à nossa primeira função (Figura 2). Essa função será responsável por adicionar um ID único ao token do usuário logado, para isso utilizamos os blocos Cria Identificador Universal e Definir Variável de Token da Requisição.

Em seguida, adicionamos o bloco Inserir no retorno da função. Esse bloco é responsável por salvar o ID do token do usuário logado na tabela Session do banco de dados, juntamente com a informação de validade do token. Para configurar esse bloco, clique no ícone de engrenagem e, na janela de configuração, selecione a entidade Session e seus campos correspondentes. Observe que no bloco, o atributo "valid" recebe o bloco valor booleano configurado com o valor "verdadeiro", identificando que o usuário estar autenticado, portanto seu token é válido. A função configurada deve estar como a imagem abaixo.


Figura 2 - Função para criar um ID único para o token do usuário


A segunda função, nomeada como "tornarTokenInvalido" (Figura 3), será executada após o logout do usuário e terá como objetivo invalidar o token do usuário, indicando que ele não está mais logado na aplicação. Para isto, utilizamos os blocos Obter Variável do Token da Requisição e Atualizar

Para configurar bloco Atualizar, clique no ícone da engrenagem e, na janela de configuração, selecione a entidade Session. Em seguida, adicione o atributo "valid" como novo campo e o atributo "id" como nova regra. O atributo "valid" deve ser definido como falso, indicando que o usuário não está mais autenticado na aplicação. Por fim, salve as modificações.


Figura 3 - Função para tornar inválido o token do usuário


A terceira e última função, "checarValidadeToken" (Figura 4), irá verificar a validade de um token nas requisições feitas. Nesta função, utilizamos o bloco condicional Se faça e o bloco Obter token da requisição para verificar a presença do token na requisição. Posteriormente, utilizando o bloco Obter Variável do Token da Requisição, obtemos o ID desse token.

Em seguida, realizamos uma consulta, por meio do bloco Abrir consulta, que deve ser configurado conforme a Figura 4.1, para verificar se o ID é valido ou não. Caso seja inválido, será lançada uma exceção, indicando que o token não poderá mais ser utilizado. Esta função também precisará retornar os permissionáveis ao final das validações, por isso criamos na função o parâmetro "roleName" e utilizamos outro bloco Abrir consulta no retorno da função com a entidade RoleSecurable, configure-o conforme a Figura 4.2. A função configurada deve estar como a imagem abaixo.


Figura 4 - Função para verificar a validade um token


A imagem a seguir exibe a configuração do bloco Abrir consulta configurado com a entidade Session.


Figura 4.1 - Configurando bloco Abrir Consulta para Session


A Figura 4.2 exibe a configuração do bloco Abrir consulta agora configurado com a entidade RoleSecurable. Adicione a entidade, o campo, uma nova regra e um grupo, como mostrado na imagem, fique atento às condicionais dos grupos e regras: "E" (destaque a) na primeira regra e "OU" (destaque b) no grupo. Para incluir os campos em destaque, clique na opção Novo Grupo (1).


Figura 4.2 - Configurando bloco Abrir Consulta para RoleSecurable

Adicionando eventos e ações

Após criar os blocos de programação, precisamos adicioná-los a determinados eventos e ações do projeto (Figura 5). Para acessar essa funcionalidade, clique em Projetos Eventos e Ações no menu do sistema. Como mostra a imagem abaixo, a janela exibe diversos campos.

O primeiro evento que vamos associar um bloco de programação é o Depois de fazer login (destaque 1 da Figura 5). Esse evento é executado após um usuário efetuar login na aplicação. Neste eventos vamos vincular a função "criarIdParaToken" (Figura 2), para isso basta clicar no ícone azul ao lado e selecionar a função especificada.

O segundo evento é o Depois de fazer logout (2), executado após um usuário encerrar a sessão na aplicação. Nele vamos vincular a função "tornarTokenInvalido" (Figura 3). Por fim, na ação Obter Autorização do Papel (3), que obtém os permissionáveis vinculados a um grupo ou role, adicionamos o bloco "checarValidadeToken" (Figura 4). 


Figura 5 - Configurando eventos e ações

Executando o projeto

Após completar os passos anteriores, salve as alterações e execute o projeto. Na tela de login, preencha os campos com um nome de usuário e senha e faça login na aplicação. Para este exemplo, utilizamos "admin" em ambos os campos (Figura 6).


Figura 6 - Tela de login


Depois de fazer login na aplicação, clique no ícone de destaque 1 da Figura 7 para acessar o banco de dados, e, em seguida, clique na opção Manipular dados. Na janela exibida em sequência (Figura 7), realize uma consulta simples na tabela "Session" (destaque 2) e observe que o atributo "valid" do usuário logado está definido como "TRUE" (3). Esse valor denota que o token é válido, indicando que o usuário está autenticado na aplicação. 


Figura 7 - Visualização do banco de dados


Posteriormente, faça o logout do usuário como apresentado na imagem abaixo.


Figura 7.1 - Fazendo logout do usuário


Consulte novamente a tabela "Session" (destaque 1 da Figura 7.2). Você notará que o valor do token estará como "FALSE" (2), indicando que o usuário não está mais autenticado na aplicação. Dessa forma, o token passa a ser inválido e não pode mais ser utilizado.


Figura 7.2 - Visualização do banco de dados após logout


Nesta página

  • Sem rótulos