Pular para conteúdo

Autenticação - Guia para Integradores

Este guia explica como autenticar e usar a API do ecosif-compliance.

Visão geral

O ecosif-compliance não possui endpoints de login. Ele valida tokens JWT emitidos pelo serviço ecosif-auth (porta 8080), no mesmo padrão do ecosif-masterdata.

Modos (ECOSIF_API_TOKEN_MODE):

  • ECOSIF_JWT (padrão) — Bearer HS512 com AUTH_TOKEN_SECRET
  • HYBRID_ECOSIF_AZURE — JWT eCosif ou token Azure
  • AZURE_ENTERPRISE_GATEWAY / GOOGLE_GATEWAY — token do IdP

Alinhamento técnico: autenticacao_jwt_alinhamento.md.

Fluxo

1. Cliente → ecosif-auth (porta 8080)
   POST /api/auth/signin

2. ecosif-auth → Cliente
   { accessToken: "eyJhbGciOiJIUzI1NiJ9..." }

3. Cliente → ecosif-compliance (porta 8021)
   GET /api/compliance/rule/list
   Authorization: Bearer <token>

4. ecosif-compliance → Cliente
   [valida token e retorna dados]

Passo 1: Obter token JWT

curl -X POST http://localhost:8080/api/auth/signin \
  -H "Content-Type: application/json" \
  -d '{
    "username": "admin",
    "password": "senha"
  }'

Response

{
  "accessToken": "eyJhbGciOiJIUzI1NiJ9...",
  "user": {
    "id": "1",
    "displayName": "Administrator",
    "email": "admin",
    "roles": ["ADMIN"],
    "tenant": "TEMP_TENANT"
  },
  "tenantName": "TEMP_TENANT"
}

Passo 2: Usar o token

Authorization: Bearer <seu-token-jwt>

cURL

TOKEN="eyJhbGciOiJIUzI1NiJ9..."

curl -X GET http://localhost:8021/api/compliance/rule/list \
  -H "Authorization: Bearer $TOKEN"

JavaScript

const token = localStorage.getItem('token');

const response = await fetch('http://localhost:8021/api/compliance/rule/list', {
  headers: {
    Authorization: `Bearer ${token}`,
  },
});

const rules = await response.json();

Python

import requests

headers = {'Authorization': f'Bearer {token}'}
response = requests.get('http://localhost:8021/api/compliance/rule/list', headers=headers)
rules = response.json()

Renovação de token

Tokens JWT expiram (padrão 30 minutos). Em 401 Unauthorized:

  1. Faça login novamente no ecosif-auth
  2. Substitua o token armazenado
  3. Repita a requisição

Endpoints que não requerem autenticação

  • /health e /actuator/** — health, info e métricas
  • /docs/**, /swaggerui/**, /v3/api-docs, /v3/api-docs.yaml, /openapi.json, /swagger.json — documentação (somente se ECOSIF_COMPLIANCE_SWAGGER_ENABLED=true)

Todos os demais endpoints exigem JWT válido quando ECOSIF_COMPLIANCE_AUTH_ENABLED=true.

Validação do token

O middleware Flask:

  1. Exige header Authorization: Bearer ...
  2. Valida assinatura, algoritmo, emissor/audiência conforme o modo
  3. Popula g.ecosif_user para isolamento por empresa/filial

Token ausente ou inválido → 401 com corpo:

{
  "response-code": 2,
  "response-message": "Invalid Token",
  "message-mode": "ALERT"
}

Boas práticas

  1. Armazene o token com segurança; não coloque em URL nem em log
  2. Trate 401 com novo login
  3. Use HTTPS em produção
  4. Use a mesma AUTH_TOKEN_SECRET do ecosif-auth nos modos ECOSIF_JWT / híbrido

Próximos passos