Autenticação JWT em APIs — ASP.NET Core 2.1
Implementar a parte de segurança da nossa aplicação é um dever, afinal, não queremos que qualquer pessoa possa acessá-la e fazer o que bem quiser, gerando problemas como roubo de informações confidenciais.
O JWT é uma das práticas mais adotadas para segurança de APIs. Essa técnica utiliza tokens que liberam acesso a determinada API, e para tudo isso funcionar, precisamos de um gerador e um autenticador de token.
Na utilização de uma API, os seguintes passos são necessários:
- Obter um token através do login;
- Guardar o token recebido;
- Para cada requisição, se faz necessário passar o token.
Vamos para a implementação.
No arquivo “appsettings.json”, adicione o código:
Na instrução acima eu criei 3 parâmetros:
- Issuer: Representa quem está emitindo o token;
- Audience: Para quem se destina o token;
- SecretKey: Servirá para codificar e decodificar o token.
Feito isso, vamos agora criar nosso gerador de token da aplicação. Para isso, crie uma controller “LoginController” e implemente o seguinte código:
Note que estou utilizando dois Claims:
- Jti: É o identificador do token. Deve ser único para cada token gerado.
- userId: É um identificador do usuário que se autenticou na aplicação, nesse caso, eu passo o Id do usuário.
Finalizamos nosso gerador de token; agora é necessário implementar nosso middleware de autenticação, ou seja, o autenticador de token. Vá até a “Startup.cs” e no método “ConfigureServices”, adicione o trecho abaixo:
Perceba que no dentro do services.AddMvc(), foi adicionado um filtro novo AuthorizeFilter, que é responsável por barrar toda e qualquer requisição que não esteja autorizada em nossa API.
Vale ressaltar também, que todas as informações de Issuer, Audience e SecretKey, utilizadas pelo login, também devem ser utilizadas aqui, pois o middleware de autenticação usa essas informações para validar o token passado.
E por fim, para que toda essa configuração seja utilizada, na classe “Startup.cs”, no método “Configure”, adicione o seguinte trecho:
Finalizamos nossa autenticação, agora nossa aplicação somente poderá ser acessada por quem realmente é autorizado.
Para realizar os testes, vamos criar um novo método em nossa própria controller “LoginController”
Vou utilizar o postman, porém você pode utilizar outro a sua escolha.
Realizando uma requisição GET na URL: http://localhost:64166/api/login, percebemos que imediatamente é retornado um “http status 401-unauthorized”, pois você não tem permissão para acessar.
Precisamos nos autenticar para obter o token de acesso e para isso, realizamos uma requisição para a URL: http://localhost:64166/api/login, passando username e password no corpo da requisição.
Com o token disponível, vamos novamente realizar uma requisição passando o token no Header para acessar qualquer recurso:
Código disponível em https://github.com/reniciuspagotto/jtw-auth-sample
Até mais!!!