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-filepela 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
3000comoPORTem meu.env, por isso utilizei o comando abaixo, mas caso queira trocar não há problema, apesar de estar comoEXPOSEnoDockerfile
docker run --env-file .env -p 3000:3000 felipekobra/auth_apiPOST
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
JWKestá 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