Autenticação - Guia para Integradores
Este guia explica como autenticar e usar a API do ecosif-masterdata.
Visão Geral
O ecosif-masterdata não possui endpoints de autenticação próprios. Ele valida tokens JWT emitidos pelo serviço ecosif-auth (porta 8080).
Fluxo de Autenticação
1. Cliente → ecosif-auth (porta 8080)
POST /api/auth/signin
2. ecosif-auth → Cliente
{ accessToken: "eyJhbGciOiJIUzI1NiJ9..." }
3. Cliente → ecosif-masterdata (porta 8081)
GET /companies
Authorization: Bearer <token>
4. ecosif-masterdata → Cliente
[valida token e retorna dados]
Passo 1: Obter Token JWT
Endpoint de Login
Faça login no ecosif-auth (porta 8080):
curl -X POST http://localhost:8080/api/auth/signin \
-H "Content-Type: application/json" \
-d '{
"username": "admin",
"password": "senha",
"azure": false
}'
Response
{
"accessToken": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTY0MDAwMDAwMCwiZXhwIjoxNjQwMDE4MDAwfQ.xyz",
"user": {
"id": "1",
"displayName": "Administrator",
"email": "admin",
"roles": ["ADMIN"],
"tenant": "TEMP_TENANT"
},
"tenantName": "TEMP_TENANT"
}
Passo 2: Usar Token nas Requisições
Header Authorization
Inclua o token no header Authorization:
Authorization: Bearer <seu-token-jwt>
Exemplo com cURL
TOKEN="eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTY0MDAwMDAwMCwiZXhwIjoxNjQwMDE4MDAwfQ.xyz"
curl -X GET http://localhost:8081/companies \
-H "Authorization: Bearer $TOKEN"
Exemplo com JavaScript
const token = localStorage.getItem('token');
const response = await fetch('http://localhost:8081/companies', {
headers: {
'Authorization': `Bearer ${token}`
}
});
const companies = await response.json();
Exemplo com Python
import requests
token = "seu-token-jwt-aqui"
headers = {
'Authorization': f'Bearer {token}'
}
response = requests.get('http://localhost:8081/companies', headers=headers)
companies = response.json()
Renovação de Token
Tokens JWT expiram após 30 minutos (padrão). Quando expirar:
- Cliente recebe
401 Unauthorizedem requisições - Cliente deve fazer login novamente no ecosif-auth
- Cliente usa novo token em requisições subsequentes
Tratamento de Token Expirado
async function fazerRequisicao(url) {
let token = localStorage.getItem('token');
let response = await fetch(url, {
headers: {
'Authorization': `Bearer ${token}`
}
});
// Se token expirou, fazer login novamente
if (response.status === 401) {
// Fazer login novamente no ecosif-auth
const loginResponse = await fetch('http://localhost:8080/api/auth/signin', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
username: 'admin',
password: 'senha',
azure: false
})
});
const loginData = await loginResponse.json();
token = loginData.accessToken;
localStorage.setItem('token', token);
// Tentar requisição novamente
response = await fetch(url, {
headers: {
'Authorization': `Bearer ${token}`
}
});
}
return response.json();
}
Endpoints que Não Requerem Autenticação
Os seguintes endpoints são públicos:
/actuator/**: Health checks e métricas/swagger-ui/**: Interface Swagger UI/v3/api-docs/**: Especificação OpenAPI
Todos os outros endpoints requerem autenticação JWT válida.
Validação do Token
O ecosif-masterdata valida o token JWT:
- Verifica a assinatura (usando a mesma chave secreta do ecosif-auth)
- Verifica se o token não expirou
- Extrai informações do usuário do token
Se o token for inválido ou expirado, retorna 401 Unauthorized.
Boas Práticas
- Armazene o token com segurança: Use localStorage, sessionStorage ou gerenciador de estado
- Não exponha o token: Não inclua em URLs ou logs
- Trate expiração: Implemente renovação automática quando possível
- Use HTTPS: Sempre use HTTPS em produção
- Valide respostas: Sempre verifique códigos de status HTTP
Próximos Passos
- Uso da API: Saiba como usar outros endpoints
- Exemplos: Veja exemplos completos
- Erros Comuns: Resolva problemas frequentes