Autenticação na API RiskFlow
Visão Geral
A API RiskFlow utiliza autenticação baseada em API Key (JWT - JSON Web Token). Para acessar endpoints protegidos, você precisa obter um token JWT através do processo de login e incluí-lo em todas as requisições subsequentes.
Obtenção do Token JWT
Endpoint de Login
POST /api/auth/login
Corpo da Requisição
{
"email": "[email protected]",
"senha": "sua_senha"
}
Exemplo de Requisição (cURL)
curl -X POST \
'http://localhost:3000/api/auth/login' \
-H 'Content-Type: application/json' \
-d '{
"email": "[email protected]",
"senha": "admin123"
}'
Exemplo de Requisição (JavaScript - Fetch API)
const requestOptions = {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
email: '[email protected]',
senha: 'admin123'
})
};
fetch('http://localhost:3000/api/auth/login', requestOptions)
.then(response => response.json())
.then(data => {
// Armazenar o token para uso futuro
localStorage.setItem('token', data.token);
console.log('Login bem-sucedido:', data);
})
.catch(error => console.error('Erro no login:', error));
Exemplo de Requisição (Node.js - Axios)
const axios = require('axios');
axios.post('http://localhost:3000/api/auth/login', {
email: '[email protected]',
senha: 'admin123'
})
.then(response => {
// Armazenar o token para uso futuro
const token = response.data.token;
console.log('Login bem-sucedido:', response.data);
})
.catch(error => console.error('Erro no login:', error));
Resposta de Sucesso (200 OK)
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7ImlkIjoiNTUwZTg0MDAtZTI5Yi00MWQ0LWE3MTYtNDQ2NjU1NDQwMDAwIiwibm9tZSI6IkFkbWluaXN0cmFkb3IiLCJlbWFpbCI6ImFkbWluQHJpc2tmbG93LmNvbSIsInBlcmZpcyI6WyJBRE1JTiJdfSwiaWF0IjoxNjIwMDAwMDAwLCJleHAiOjE2MjAwODY0MDB9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
"usuario": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"nome": "Administrador",
"email": "[email protected]",
"perfis": ["ADMIN"]
}
}
Resposta de Erro (401 Unauthorized)
{
"error": {
"message": "Credenciais inválidas",
"code": "INVALID_CREDENTIALS",
"requestId": "550e8400-e29b-41d4-a716-446655440000"
}
}
Utilização do Token JWT
Após obter o token JWT, você deve incluí-lo em todas as requisições subsequentes para endpoints protegidos. Existem duas formas de enviar o token:
1. Header x-api-key (Recomendado)
x-api-key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Exemplo (cURL)
curl -X GET \
'http://localhost:3000/api/analises' \
-H 'x-api-key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'
Exemplo (JavaScript - Fetch API)
const token = localStorage.getItem('token');
const requestOptions = {
method: 'GET',
headers: { 'x-api-key': token }
};
fetch('http://localhost:3000/api/analises', requestOptions)
.then(response => response.json())
.then(data => console.log('Dados recebidos:', data))
.catch(error => console.error('Erro na requisição:', error));
Exemplo (Node.js - Axios)
const axios = require('axios');
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...';
axios.get('http://localhost:3000/api/analises', {
headers: {
'x-api-key': token
}
})
.then(response => {
console.log('Dados recebidos:', response.data);
})
.catch(error => console.error('Erro na requisição:', error));
2. Header Authorization (Bearer Token)
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Exemplo (cURL)
curl -X GET \
'http://localhost:3000/api/analises' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'
Exemplo (JavaScript - Fetch API)
const token = localStorage.getItem('token');
const requestOptions = {
method: 'GET',
headers: { 'Authorization': `Bearer ${token}` }
};
fetch('http://localhost:3000/api/analises', requestOptions)
.then(response => response.json())
.then(data => console.log('Dados recebidos:', data))
.catch(error => console.error('Erro na requisição:', error));
Exemplo (Node.js - Axios)
const axios = require('axios');
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...';
axios.get('http://localhost:3000/api/analises', {
headers: {
'Authorization': `Bearer ${token}`
}
})
.then(response => {
console.log('Dados recebidos:', response.data);
})
.catch(error => console.error('Erro na requisição:', error));
Erros Comuns de Autenticação
Token Não Fornecido (401 Unauthorized)
{
"error": {
"message": "API Key não fornecida",
"code": "API_KEY_REQUIRED",
"requestId": "550e8400-e29b-41d4-a716-446655440000"
}
}
Token Inválido (401 Unauthorized)
{
"error": {
"message": "API Key inválida",
"code": "INVALID_API_KEY",
"requestId": "550e8400-e29b-41d4-a716-446655440000"
}
}
Token Expirado (401 Unauthorized)
{
"error": {
"message": "API Key expirada",
"code": "API_KEY_EXPIRED",
"requestId": "550e8400-e29b-41d4-a716-446655440000"
}
}
Renovação do Token
Quando o token expira, é necessário fazer login novamente para obter um novo token. A duração padrão do token é de 24 horas (configurável no arquivo .env através da variável AUTH_EXPIRES_IN).
Melhores Práticas
- Armazenamento Seguro: Armazene o token JWT de forma segura (localStorage para aplicações frontend, variáveis de ambiente para backend).
- HTTPS: Sempre use HTTPS para transmitir o token JWT.
- Renovação Automática: Implemente lógica para renovar automaticamente o token antes que expire.
- Logout: Ao fazer logout, remova o token do armazenamento local.
Próximos Passos
Agora que você entende como autenticar-se na API RiskFlow, pode explorar os diferentes endpoints disponíveis nos outros módulos da documentação.