.NET 5 + JWT + Polly + Refit: consumindo APIs seguras com simplicidade e resiliência
Este post traz uma variação atualizada para o .NET 5 de um exemplo que apresentei anteriormente no seguinte artigo:
.NET Core + JWT + Polly + Refit: consumindo APIs seguras com simplicidade e resiliência
O novo projeto (uma Console Application) foi disponibilizado no GitHub, fazendo uso ainda das bibliotecas Polly e Refit com o intuito de simplificar o consumo de uma API REST protegida e o tratamento envolvendo a expiração de tokens JWT. Para ter acesso ao código desta aplicação acesse o link a seguir:
https://github.com/renatogroffe/DotNet5-Refit-JWT-RefreshTokens-Polly_ConsumoAPIContagem
A API que será consumida (um contador de acessos) já foi detalhada em outro artigo que publiquei neste blog:
.NET 5 + ASP.NET Core + JWT + Refresh Tokens: exemplo de implementação
E também está no GitHub:
https://github.com/renatogroffe/ASPNETCore5_JWT-Identity-RefreshTokens
Aproveito esse espaço para um convite…
Dia 30/06 (segunda) às 21:00 — horário de Brasília — teremos mais um evento online e gratuito no canal Canal .NET.
Ao longo desta live abordarei dicas, truques e alternativas úteis para o desenvolvimento Back-End e de APIs REST com .NET 5, ASP.NET Core, Azure Functions. Ao longo da apresentação será coberto o uso de diferentes frameworks, serviços na nuvem, mensageria, bancos de dados e boas práticas de forma a facilitar e tornar mais dinâmica a implementação de soluções baseadas na plataforma .NET no seu dia a dia.
Teremos também algumas novidades do .NET 6 demonstradas na prática!
Para participar faça sua inscrição no link a seguir, a transmissão acontecerá via YouTube:
No caso específico desta API REST, configurei o tempo de expiração do token JWT para 10 segundos (TokenConfigurations:Seconds) e do refresh token para 25 segundos (TokenConfigurations:FinalExpiration) no arquivo appsettings.json:
Na imagem a seguir temos o processo inicial envolvendo o consumo da API:
- Uma autenticação inicial será executada, obtendo com isto um token JWT e um refresh token;
- A expiração do token JWT após 10 segundos fará com que a Retry Policy criada com o Polly seja executada, com a utilização do refresh token a fim de obter um novo acesso (outro token JWT e sem passar pelo processo inicial de autenticação com usuário + senha).
Expirado o refresh token teremos o processo de autenticação com usuário + senha executado mais uma vez, conforme demonstrado na próxima imagem:
Toda esta dinâmica está representada no código da classe APIContagemClient, com o uso do tipo AsyncRetryPolicy (namespace Polly.Retry) e de duas interfaces baseadas em Refit para comunicação com a Web App contendo a API a ser consumida (ILoginAPI e IContagemAPI):
A interface ILoginAPI será empregada na autenticação (via usuário + senha ou refresh token):
Já IContagemAPI consumirá a API de contagem de acessos, enviando à mesma um token JWT (caso este não seja válido teremos a execução da Retry Policy):
O envio de requisições acontecerá a partir da utilização de APIContagemClient na classe Program: