Skip to main content

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

  1. Armazenamento Seguro: Armazene o token JWT de forma segura (localStorage para aplicações frontend, variáveis de ambiente para backend).
  2. HTTPS: Sempre use HTTPS para transmitir o token JWT.
  3. Renovação Automática: Implemente lógica para renovar automaticamente o token antes que expire.
  4. 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.