Implementando JWT com Deno e ABC

oliveirabalsa

Leonardo Oliveira Balsalobre

Posted on June 11, 2020

Implementando JWT com Deno e ABC

Conforme temos visto nos ultimo meses, o novo runtime feito por Ryan Dahl (criador do Node) vem tomando espaço no cronograma de estudos de diversos desenvolvedores e entusiastas.

Mas o que é o Deno?

Deno visa fornecer um ambiente de script produtivo e seguro para o programador moderno. Ele é construído sobre V8, Rust e TypeScript.

A principal característica que chamou atenção no novo runtime, foi a forma com qual foi construído, sempre buscando tornar o acesso e o trafego dos dados mais seguro.

Por exemplo:

Em Node, para iniciarmos um servidor executamos "npm start" ou "npm run dev", de uma forma simples e imediata o seu servidor ja está rodando.

Já no Deno, é necessário dar permissão para que ele acesse sua internet(--allow-net), escrita(--allow-write), leitura(--alow-read), entre outros(--allow-all). E para aprimorar ainda mais nossa segurança iremos utilizar o famoso JWT.

Bora para o que interessa!

Nesse projeto usaremos as seguintes bibliotecas:

Framework ABC: https://deno.land/x/abc
Bcrypt: https://deno.land/x/bcrypt
Djwt: https://deno.land/x/djwt
Mongo: https://deno.land/x/mongo

Primeiramente vocês vão precisar baixar as dependências....

Só que não! O Deno importa suas dependências diretamente da sua raiz e assim não existe nenhum node_modules com alguns milhares de megabytes.

Ao iniciarmos a construção da nossa API, a primeira coisa que vamos fazer é criar um endpoint de usuário e como o Deno ja suporta Typescript por padrão então iremos utiliza-lo ;D

  1. Primeiramente importamos HandlerFunc e Context que são premissas para criarmos as funções utilizando o framework ABC (também temos o Oak que tem uma similaridade com Koa)

  2. Após importarmos note que estamos importando diretamente do deno.land, isso significa que ao iniciarmos o servidor o Deno irá baixar as dependências e armazená-las em um cache, mas isso é assunto para um outro artigo.

Criando usuário

  1. Também importaremos o bcrypt que é uma biblioteca para gerar hash da senha do usuário aumentando ainda mais a segurança da nossa API.

  2. Em seguida iremos criar nosso token.ts que é a configuração da autenticação do JWT que será usada no projeto. Note que na expiração colocamos a data atual mais 60 * 60000 que significa 1 hora, onde 60000 é 1 minuto.

Alt Text

  1. Após nosso token estar totalmente configurado iremos fazer uma controller que se chamará authController.ts, ela será a responsável por interceptar todas as requisições da nossa API, sendo usada como um middleware. Outro ponto que gostaria de comentar é que ao construir esse projeto procurei inúmeras formas de validar quais rotas teriam acesso sem que o interceptador de token entrasse em vigor. A única forma com qual consegui foi buscando dentro do contexto da requisição qual é o path da rota, sendo assim fiz um if para que caso a rota não fosse a que eu queria, o interceptador seria executado, do contrario, a rota estaria livre de token, que é o cenário que queremos no caso de login.

Alt Text

  1. Por fim iremos no nosso server.ts fazer com que nosso app use o authController como middleware.

Alt Text

Considerações finais
Para quem não tem conhecimento em API's ou até mesmo em Deno básico, talvez esse artigo não seja tão útil, mas a intenção foi passar o conhecimento de como utilizei o ABC para fazer uma autenticação JWT, até o momento em que fiz esse mini-projeto não havia encontrado em lugar algum da internet uma autenticação JWT que não usasse o Oak.

Para fins de duvidas, estou disponibilizando meu repositório que é exatamente esse da imagem onde tenho um Crud completo de usuário com bcrypt e JWT implementados.

Link do repositório: https://github.com/oliveirabalsa/deno-demo

Por enquanto é isso e nos vemos em breve, dúvidas ou sugestão deixem nos comentários ou nos procure nas redes Sociais!

Acompanhe nossos canais de conteúdo:

💖 💪 🙅 🚩
oliveirabalsa
Leonardo Oliveira Balsalobre

Posted on June 11, 2020

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

What is Deno?
deno What is Deno?

July 14, 2022