ASP.NET Core + JWT + Azure Key Vault: exemplo de implementação

Renato Groffe
Azure na Pratica
Published in
4 min readOct 26, 2020

Venho abordando o uso de JWT (JSON Web Tokens) na construção de APIs REST mais seguras com ASP.NET Core há algum tempo, com o post a seguir agrupando todo este trabalho (inclui diversos artigos, projetos de exemplo e vídeo:

ASP.NET Core + JWT: Guia de Referência

Neste novo artigo trago uma nova implementação de API protegida por JWT em ASP.NET Core 3.1, só que desta vez combinando o uso destas tecnologias com um Secret armazenado no Azure Key Vault. Trata-se de uma variação de exemplos já detalhados no link indicado no início deste post. O projeto aqui discutido já se encontra inclusive disponível no GitHub:

ASP.NET Core 3.1 + REST API + Contagem de Acessos + JWT + Azure Key Vault

Para aqueles que ainda não conhecem este serviço, o Key Vault é uma alternativa segura para o armazenamento de configurações sensíveis no Microsoft Azure (através da concessão de permissões de acesso a uma aplicação). Maiores informações sobre como configurar o Azure Key Vault em uma aplicação .NET podem ser encontradas no seguinte artigo:

ASP.NET Core: melhorando o gerenciamento de configurações com Azure App Configuration e Key Vault

Para os testes envolvendo o projeto de exemplo cadastrei no Key Vault um Secret chamado Secret-JWTKey, informando uma string com 32 caracteres para o mesmo:

Este segredo (Secret-JWTKey) será utilizado na classe SigningConfigurations para a geração de instâncias dos tipos SymmetricSecurityKey e SigningCredentials (localizados no namespace Microsoft.IdentityModel.Tokens), com ambos servindo como base para a geração do token de segurança a partir do padrão HMAC:

  • Vale destacar que estamos utilizando o segredo por meio de uma instância de IConfiguration, muito embora esta não obtenha tal valor do arquivo appsettings.json;
  • O que acontecerá na prática é que o objeto IConfiguration será populado com Secrets armazenados no Azure Key Vault.

Precisaremos ainda registrar nossa aplicação no Azure Active Directory, utilizando o Application (client) ID gerado:

E definindo ainda um Secret para acesso ao Key Vault:

Será preciso então liberar o acesso para esta aplicação na seção Access policies do Azure Key Vault:

Estas configurações (incluindo o endereço do Key Vault) foram indicadas para testes na seção AzureKeyVault do arquivo appsettings.json:

Na imagem a seguir temos um exemplo de consumo desta API, através do uso de uma Console Application criada com .NET Core 3.1:

Este projeto emprega as bibliotecas Refit (que simplifica o consumo de uma API REST em .NET) e Polly (para tratamento de falhas, com a obtenção de um novo token quando o atual expirar):

.NET Core 3.1 + Refit + Consumo de API REST de contagem de acessos + JWT + Código Resiliente com Polly

A string JSON a seguir:

Permitirá a obtenção de um novo token via Postman (por meio da URL https://localhost:5001/login):

E de posse deste valor poderemos acessar o contador de acessos (URL https://localhost:5001/contador):

E finalizo este post com um convite…

Procurando recolocação profissional? Ou então alavancar sua carreira, aprendendo tecnologias em alta? Que tal então aproveitar este momento em que estamos todos em casa fazendo um treinamento ONLINE e GRATUITO sobre administração de bancos de dados relacionais no Microsoft Azure?

Aproveite então esta oportunidade e participe deste minicurso que cobrirá o uso de Azure SQL, PostgreSQL e MySQL na nuvem Microsoft. Esta é mais uma iniciativa da comunidade Azure na Prática, prevista para a manhã do dia 07/11/2020 (sábado) das 09:00 às 11:30 — horário de Brasília.

Receba ao final um certificado de conclusão sem custo algum!

Para efetuar sua inscrição clique no link:

https://bit.ly/anp-bds-gratuito-blog-groffe

--

--

Renato Groffe
Azure na Pratica

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