.NET 7 + ASP.NET Core + JWT + Swagger: implementando a utilização de tokens

Renato Groffe
3 min readFeb 27

--

Neste novo post trago uma atualização de um projeto que venho construindo desde as primeiras versões do ASP.NET Core, demonstrando como utilizar JWT (JSON Web Tokens) na proteção de recursos de uma API REST. Esta nova versão foi desenvolvida em .NET 7 e disponibilizada através de um repositório do GitHub:

https://github.com/renatogroffe/ASPNETCore7-REST_API-JWT-BearerEvents-Swagger-Extensions_ContagemAcessos

Caso achem útil esta solução, peço por favor um ⭐️ no repositório apoiando. Fica também o convite para que vocês me sigam lá no GitHub!

Nesta aplicação também foram utilizadas as seguintes tecnologias:

  • Swagger/OpenApi
  • ASP.NET Core Identity
  • Entity Framework Core InMemory

Como este projeto guarda bastante semelhança com a versão equivalente em .NET 6, sugiro que consulte o artigo a seguir para maiores detalhes sobre a implementação que utilizei:

.NET 6 + ASP.NET Core + JWT + Swagger: implementando a utilização de tokens

Em relação à versão em .NET 6 introduzi agora como novidade a classe JwtSecurityExtensionEvents (na Class Library APIs.Security.JWT), uma implementação baseada no tipo JwtBearerEvents (namespace Microsoft.AspNetCore.Authentication.JwtBearer):

  • Diversos eventos envolvendo a validação de tokens podem ser configurados com construções derivadas de JwtBearerEvents;
  • A sobrecarga do método Challenge permitirá emitir uma mensagem de log no caso de um token inválido (ou mesmo inexistente).
Clique nesta imagem para visualizar com uma melhor resolução

Utilizada na extensão representada pelo método AddJwtSecurity em JwtSecurityExtension (Class Library APIs.Security.JWT), a classe JwtSecurityExtensionEvents será referenciada em 2 pontos:

  • Em uma chamada ao método AddScoped (linha 24), de forma a registrá-la como uma dependência do projeto (a ser resolvida via injeção);
  • Como valor da propriedade EventsType (linha 54), nas opções de configuração para o método AddJwtBearer.

Lembrando que a extensão AddJwtSecurity é acionada em Program.cs (linha 36), no projeto correspondente à API REST de exemplo (APIContagem):

Com a classe ContadorController marcada com o atributo Authorize (linha 10), de maneira que aceite na Action Get somente requisições que possuam um token JWT informado via Header:

Para obter um novo token utilize as seguintes credenciais:

Na próxima imagem podemos observar os logs indicando falhas e que foram produzidos através do tipo JwtSecurityExtensionEvents:

Demonstrei ainda o uso de uma aplicação que consome esta API protegida em uma live recente no Canal .NET, incluindo o tratamento de expiração de tokens empregando a policy Retry do projeto Polly:

Este segundo exemplo também foi disponibilizado no GitHub:

https://github.com/renatogroffe/DotNet7-Refit-JWT-Polly_ConsumoAPIContagem

Caso achem útil esta segunda solução, novamente peço por favor um ⭐️ no repositório apoiando. E também deixo o convite para que vocês me sigam lá no GitHub!

--

--

Renato Groffe

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