.NET 5 + JWT + Polly + Refit: consumindo APIs seguras com simplicidade e resiliência

Renato Groffe
3 min readJun 28, 2021

--

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:

https://bit.ly/live-backend-dotnet-jun-2021

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).
Clique nesta imagem para visualizar com uma melhor resolução

Expirado o refresh token teremos o processo de autenticação com usuário + senha executado mais uma vez, conforme demonstrado na próxima imagem:

Clique nesta imagem para visualizar com uma melhor resolução

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):

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:

--

--

Renato Groffe
Renato Groffe

Written by Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker