Olá, sou Felipe, e essa é uma backend de autenticação realizada por mim utilizando essas tecnologias:
- Node.js
- Express
- Passport
- JWT
- Refresh Token
- OAuth
- Chaves Assimétricas
- JWKS Endpoint
- Recuperação de senha
- Confirmação de Email
- Envio de email utilizando SMTP
- Clonar o Repositório
git clone https://github.com/FelipeKobra/Auth_API.git
- Instalar os pacotes
npm install
- 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
-
Comandos de Inicialização
-
Desenvolvimento
npm run dev
-
Produção
npm run build
npm run start
-
- Baixar a imagem
docker pull felipekobra/auth_api
- 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
- 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
- Sem espaços entre o nome da variável, o
- No meu caso adicionei a porta
3000
comoPORT
em meu.env
, por isso utilizei o comando abaixo, mas caso queira trocar não há problema, apesar de estar comoEXPOSE
noDockerfile
docker run --env-file .env -p 3000:3000 felipekobra/auth_api
POST
http://localhost:3000/user/login
Campos necessários no body
- password
GET
http://localhost:3000/user/logout
POST
http://localhost:3000/user/register
Campos necessários no body
- password
- name
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
POST
http://localhost:3000/redefinePassword/email
Campos necessários no body
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
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
- 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á emsrc/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 nopackage.json