Node

Microserviço para Autenticação e Gerenciamento de Usuários - REST API

Middleware para Método de Autenticação Bearer Token

Bearer Token é uma forma de autenticação baseada em um Token.
Campos obrigatórios no header do HTTP: Token e o Prefixo cujo valor default é "Bearer".

A ideia é que todos os endpoints do CRUD de usuários sejam autenticados com o Token.

Criar um Middleware para validar o Token

Criar o arquivo src/middlewares/bearer-authentication.ts
 
                            import { Request, Response, NextFunction } from 'express';
                            import ForbiddenError from '../models/errors/forbidden.error.model';
                            import userRepository from '../repositories/user.repository';
                            import JWT from 'jsonwebtoken';

                            async function bearerAuthentication(req: Request, res: Response, next: NextFunction){
                                try{
                                    // Recuperar credenciais do header da requisição
                                    const authorizationHeader = req.headers['authorization'];
                                    if (!authorizationHeader) {
                                        throw new ForbiddenError('Credenciais não informadas');
                                    } 

                                    // Tratar as credenciais (separando os valores)
                                    const [authorizationType, token] = authorizationHeader?.split(" "); 
                                    if(authorizationType !== 'Bearer' || !token){
                                        throw new ForbiddenError('Tipo de autenticação inválida');
                                    }

                                    // Validar token (verificar se é válido)
                                    const tokenPayload = JWT.verify(token, 'my_secret_key'); 
                                    if(typeof tokenPayload !== 'object' || !tokenPayload.sub){
                                        throw new ForbiddenError('Token inválido');
                                    }

                                    // Token já tem os dados do usuário, e é CONFIÁVEL
                                    const user = { uuid: tokenPayload.sub, userName: tokenPayload.userName };

                                    // colocar user na request para ficar acessível para os demais middlewares
                                    req.user = user;

                                    // Chamar o próximo middleware
                                    next();

                                }catch(error){
                                    next(error);
                                }
                            };
                            export default bearerAuthentication;
                        

Registrar o Middleware no server

Editar a configuração da rota usersRoute no server em src/index.ts

                            // ANTES
                            // app.use(usersRoute);
                            
                            // DEPOIS
                            app.use(bearerAuthentication, usersRoute);