.NET 6 + Minimal APIs + JWT + Swagger: implementando a utilização de tokens
Este novo artigo traz uma variação de outro exemplo apresentado neste blog e que aborda como configurar o uso de JWT (JSON Web Tokens) em APIs REST, só que desta vez demonstrando como podemos proteger endpoints em um projeto .NET 6 que faz uso de Minimal APIs.
Apresentei esta solução inclusive em uma live recente no Canal .NET, com o conteúdo da mesma podendo ser assistido gratuitamente no YouTube:
O próximo link traz o artigo que serviu de base para a implementação do exemplo deste post:
.NET 6 + ASP.NET Core + JWT + Swagger: implementando a utilização de tokens
Quanto ao exemplo com Minimal APIs, o mesmo foi disponibilizado no GitHub:
https://github.com/renatogroffe/ASPNETCore6-MinimalAPIs-JWT-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!
Muitas das configurações detalhadas no antigo anterior e implementadas na Class Library APIs.Security.JWT se mantiveram, com a novidade estando na classe SwaggerJWTExtension:
O tipo SwaggerJWTExtension conta com o Extension Method AddSwaggerGenJwt, o qual possibilita configurar a interface gráfica do Swagger/OpenApi para que disponibilize um campo para preenchimento do Bearer Token (JWT) antes do envio de requisições a endpoints protegidos:
Já no arquivo Program.cs teremos os endpoints /contador e /login, com as configurações para geração de tokens e proteção via JWT:
- A chamada ao método AddSwaggerGenJwt fará com que um campo para preenchimento seja gerado na interface do Swagger/OpenApi;
- O método AddJwtSecurity habilitará neste projeto (APIContagem) o uso de JWT, empregando para isto recursos definidos na biblioteca APIs.Security.JWT;
- Ao invocar o método UseAuthorization estaremos ativando o middleware do ASP.NET Core responsável por autenticação/autorização em endpoints;
- A instrução [Authorize(“Bearer”)] na declaração de MapGet (linha 73) fará com que o endpoint /contador exija a presença de um token em requisições direcionadas ao mesmo;
- O uso do atributo AllowAnonymous em MapPost (linha 94) permitirá que o endpoint /login receba requisições anônimas, validando as credenciais fornecidas e devolvendo um Bearer Token (JWT) se este for o caso.
Para os testes via interface do Swagger/OpenApi foram utilizadas as credenciais:
A próxima imagem traz um exemplo de geração de um token de acesso (através do endpoint /login):
O token será então utilizado no preenchimento do campo Value da tela que aparecerá ao acionar o botão Authorize, com a palavra Bearer e um caracter de espaço antecedendo o mesmo:
Requisições enviadas ao endpoint de contagem de acessos (/contador) produzirão resultados similares ao da imagem seguinte, considerando sempre o tempo de validade do token informado:
E concluo este artigo com um convite…
Nesta segunda 26/09 às 21:00 — horário de Brasília — teremos mais um evento online e gratuito no canal Canal .NET.
Uma nova live abordando dicas e truques úteis em vários cenários envolvendo o teste de aplicações .NET. Ao longo da apresentação serão demonstrados exemplos utilizando vários frameworks e a integração com soluções como Azure DevOps e GitHub Actions, bem como orientações sobre como automatizar os testes, o build e o deployment de seus projetos!
Faça sua inscrição em:
https://bit.ly/live-testes-dotnet-dicas-truques-3aed