ASP.NET Core 3.1 + JWT + Refresh Tokens: exemplo de implementação
Prática bastante difundida em projetos construídos nas mais variadas plataformas de desenvolvimento, o uso de JWT (JSON Web Tokens) constitui um meio bastante eficaz de proteção no acesso a recursos disponibilizados por APIs REST.
No caso específico do ASP.NET Core e .NET Core, aqueles que acompanham meu blog sabem que venho abordando a utilização de JWT desde a versão 2.0. O post a seguir agrupa os diversos conteúdos gratuitos (artigos, vídeos, projetos de exemplo) que já produzi sobre a configuração e uso de tokens no acesso a APIs REST:
ASP.NET Core + JWT: Guia de Referência
Recentemente publiquei um post com exemplos envolvendo a implementação/configuração de JWT em uma API REST, bem como o consumo de tal API empregando tokens:
.NET Core 3.0 + JWT: exemplos de implementação e consumo
Neste novo post dou continuidade a esse esforço, trazendo desta vez um exemplo de implementação de Refresh Tokens juntamente com JWT em uma API REST baseada no ASP.NET Core 3.1. A aplicação em questão já está disponível no GitHub:
Maiores detalhes sobre este tipo de implementação com Refresh Tokens podem ser encontrados no artigo a seguir, em que apresentei um exemplo baseado no ASP.NET Core 2.0:
ASP.NET Core 2.0 + JWT: implementando Refresh Tokens
E por que implementaríamos Refresh Tokens?
O fato de um token possuir um tempo de validade pré-determinado pode ser uma limitação em algumas situações. Expirado tal token um novo deverá ser gerado, a fim de permitir que se continue a interação com os recursos providos por uma API.
Soluções para contornar este comportamento existem e envolvem o uso de Refresh Tokens:
- Um valor adicional (um segundo token) será gerado, a fim de permitir a solicitação posterior de um novo token de acesso atualizado;
- Este procedimento dispensa a necessidade de se repetir todo o processo de autenticação que aconteceu durante a obtenção do token inicial, contribuindo assim para uma maior performance.
O uso do Redis no exemplo mencionado neste post permite controlar a validade do Refresh Token de maneira descomplicada, com o mesmo sendo descartado tão logo ocorra sua expiração.
Para entender melhor o fluxo de funcionamento desta implementação enviaremos inicialmente uma requisição à API responsável pela autenticação e fornecimento de um novo token. Utilizar para isto o seguinte conteúdo JSON no corpo da requisição:
O envio de uma requisição HTTP POST com este conteúdo trará como resultado:
O contéudo de accessToken é justamente o token baseado em JWT empregado no header de solicitações HTTP direcionadas à API de Produtos. Ao incluir um novo produto empregando este token e com os seguintes dados no corpo da requisição:
Teremos como resultado:
Decorrido pouco mais de 1 minuto (tempo que o token já estará expirado) uma tentativa de consulta aos produtos cadastrados resultará em um erro de código 401 (Unauthorized):
Podemos então empregar o Refresh Token retornado no início dos testes, a fim de obter um novo token baseado em JWT e evitar a execução de todo o processo de autenticação do zero:
Como resultado de uma requisição com este conteúdo JSON no corpo temos novos valores para accessToken e refreshToken:
Uma nova consulta aos produtos utilizando este novo accessToken resultará em sucesso:
Vale lembrar que este último Refresh Token (assim como os demais que venham a ser gerados) ficará armazenado no Redis em caráter temporário:
E concluo este post com um convite…
Que tal aprender mais sobre Azure Functions e desenvolvimento de soluções Serverless, em um workshop que acontecerá durante um sábado (dia 18/01/2020) em São Paulo Capital e implementando um case na prática? Acesse então o link a seguir para efetuar sua inscrição com um desconto especial de 25%: http://bit.ly/anp-serverless-blog-groffe
E caso você precise conhecer mais sobre o Microsoft Azure como um todo, não deixe de aproveitar o preço promocional de lançamento da primeira turma online do treinamento Azure na Prática que acontecerá dia 15/02/2020 (também um sábado). Aproveite para conhecer mais sobre dezenas de serviços e possibilidades oferecidas pelo Azure e, o melhor, no conforto de sua casa ou ambiente de trabalho! Acesse o link a seguir para informações e efetuar sua inscrição: http://bit.ly/anp-online-blog-groffe