.NET 6 + ASP.NET Core + JWT + Swagger: implementando a utilização de tokens
A aplicação apresentada neste artigo é uma variação de outro exemplo que detalhei no artigo a seguir, em que utilizei o .NET 5 como base para a implementação na época:
ASP.NET Core + JWT: configurando o uso do Swagger para testes com tokens
Neste novo post retomo o exemplo da API REST de contagem de acessos, fazendo uso para isso das seguintes tecnologias:
- .NET 6
- ASP.NET Core
- JWT (JSON Web Tokens)
- Entity Framework InMemory
- ASP.NET Core Identity (com dados em memória)
- Swagger/Open API
Este repositório já foi disponibilizado no GitHub:
https://github.com/renatogroffe/ASPNETCore6-REST_API-JWT-Swagger_ContagemAcessos
Sendo formado pelos projetos:
- APIContagem
- APIs.Security.JWT (uma Class Library criada para facilitar o reuso desta solução)
Em relação à versão anterior, as principais mudanças estão em Program.cs e englobam instruções para a configuração de recursos (até o .NET 5 isso acontecia na classe Startup). Um exemplo disto está na chamada a métodos como AddJwtSecurity (definido na Class Library APIs.Security.JWT) e UseAuthorization (a fim de exigir o acesso à API de contagem de acessos empregando tokens):
O tempo de validade do token (TokenConfigurations:Seconds) e a chave para criptografia do mesmo (TokenConfigurations:SecretJwtKey) estão em appsettings.json:
As classes LoginController:
E ContadorController:
Foram ajustadas para se chegar a uma implementação mais um enxuta, graças ao uso de recursos como Implicit Usings e File-scoped namespaces. Para saber mais sobre estas novidades do .NET 6 e C# 10 acesse os artigos:
Novidades do .NET 6: Implicit Usings
Novidades do C# 10: File-scoped namespaces
Nos projetos APIContagem:
E APIs.Security.JWT:
Estão com o uso de Nullable Reference Types habilitado por default (propriedade Nullable como enable nos seus respectivos arquivos .csproj).
Isto implicará no uso de declarações como null-conditional operator (?) em vários pontos da solução, como exemplificado pelos tipos User, TokenConfigurations e Token:
E null-forgiving operator (!), como no caso da classe AccessManager (linhas 59 e 62):
Testes via Swagger dependerão das credenciais:
Na próxima imagem temos um exemplo de geração de um token de acesso:
Este token deverá ser informado no campo Value na tela que aparecerá ao acionar o botão Authorize, sendo precedido pela palavra Bearer e um caracter de espaço:
Chamadas à API de contagem de acesso produzirão resultados similares ao da imagem seguinte, levando em conta inclusive o tempo de validade do token informado:
E aproveito este espaço para um convite…
Dia 18/01/2022 (terça) às 21:00 — horário de Brasília — teremos mais um evento online e gratuito no canal Canal .NET.
Será uma live em que apresentarei exemplos utilizando vários frameworks e a integração com soluções como o Azure DevOps, bem como novidades do .NET 6 e orientações sobre como automatizar os testes, o build e o deployment de seus projetos.
Para participar faça sua inscrição no link a seguir, a transmissão acontecerá via YouTube: