Skip to content

Latest commit

 

History

History
175 lines (117 loc) · 4.59 KB

File metadata and controls

175 lines (117 loc) · 4.59 KB

Introdução

Olá, sou Felipe, e essa é uma backend de autenticação realizada por mim utilizando essas tecnologias:

  • Node.js
  • Express
  • Passport

Funcionalidades

  • JWT
  • Refresh Token
  • OAuth
  • Chaves Assimétricas
  • JWKS Endpoint
  • Recuperação de senha
  • Confirmação de Email
  • Envio de email utilizando SMTP

Lista de Conteúdos

Instruções

Instalação Padrão

  1. Clonar o Repositório
git clone https://github.com/FelipeKobra/Auth_API.git
  1. Instalar os pacotes
npm install
  1. Adicionar as variáveis de ambiente necessárias

Deixei um arquivo chamado env_example.txt na pasta raiz do diretório, onde possui todas as variáveis de ambiente necessárias. É necessário somente adicionar suas informações no lugar e trocar o nome do arquivo para .env

  1. Comandos de Inicialização

    • Desenvolvimento

      npm run dev
    • Produção

      npm run build
      npm run start

Instalação com Docker

  1. Baixar a imagem
docker pull felipekobra/auth_api
  1. Criar um arquivo com suas variáveis de ambiente

Deixei um arquivo chamado env_example.txt na pasta raiz do diretório onde possui todas as variáveis de ambiente necessárias. É necessário somente adicionar suas informações no lugar e trocar o nome do arquivo para .env

OBS: Caso seu banco de dados esteja hospedado no localhost, troque o valor nas variáveis de ambiente, de localhost para host.docker.internal

  1. Iniciar o contêiner
  • Utilizei o parâmetro --env-file pela facilidade de enviar as variáveis de ambiente.
  • Verifique se suas variáveis de ambiente estão formatadas corretamente
    • Sem espaços entre o nome da variável, o = e o valor da variável
    • Somente utilizar "" quando tiver um espaço no valor da variável, já que em muitos momentos ele pode considerar as "" como parte do valor
  • No meu caso adicionei a porta 3000 como PORT em meu .env, por isso utilizei o comando abaixo, mas caso queira trocar não há problema, apesar de estar como EXPOSE no Dockerfile
docker run --env-file .env -p 3000:3000 felipekobra/auth_api

Endpoints

Login

POST http://localhost:3000/user/login

Campos necessários no body

  • email
  • password

Logout

GET http://localhost:3000/user/logout

Registro

POST http://localhost:3000/user/register

Campos necessários no body

  • email
  • password
  • name

Rota Protegida

GET http://localhost:3000/protected

Essa rota pode ser acessada de duas formas:

  • Enviando o token recebido no login como Bearer Token
  • Entrar automaticamente utilizando os cookies após o login

Redefinir Senha

POST http://localhost:3000/redefinePassword/email

Campos necessários no body

  • email

Google OAuth

O Google OAuth, por motivos de segurança, é realizado preferencialmente de forma visual, então decidi manter dessa forma Para acessar esse método de autenticação, basta entrar com o link abaixo no navegador e entrar com sua conta, a resposta será mostrada em forma de JSON

http://localhost:3000/auth/google

OBS: Esse é o link que deve ser acessado por padrão em meu repositório, pois em meu projeto no Google Cloud adicionei como:

  • Endpoint Padrão: http://localhost:3000/auth/google
  • Endpoint de Callback: http://localhost:3000/auth/google/callback

JWKS

Normalmente quando se cria chaves assimétricas é importante disponibilizar a chave pública para todos os serviços que utilizam nosso JWT Portanto disponibilizei um endpoint padrão, e para acessar basta enviar um: GET http://localhost:3000/.well-known/jwks.json

Ou acessá-lo em seu navegador

Observações

  • Deixei as chaves assimétricas disponíveis para melhor visualização do funcionamento para quem nunca utilizou na pasta certs
  • O método que utilizei para criar a JWK está em src/utils/JwkUtils, foi o método mais simples que consegui achar para realizar.
  • Deixei scripts personalizados no projeto para melhor utilização do Docker, podem ser observados no package.json