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);