A API do T2Mark usa dois mecanismos de autenticação dependendo da fase do agente:
Este guia explica como cada um funciona e como integrar.
A TenantKey identifica sua empresa/tenant no T2Mark.
No Painel T2Mark:
tk_a1b2c3d4e5f6...”T2Mark-Setup.exetk_a1b2c3d4e5f6ghijklmnop1234567890abcdef
| Parte | Significado |
|---|---|
tk_ |
Prefixo (identifica como TenantKey) |
| Resto | 38 caracteres aleatórios (base62) |
Ao registrar, envie a TenantKey:
curl -X POST https://t2mark.setor9.net/api/register \
-H "Content-Type: application/json" \
-d '{
"tenantKey": "tk_a1b2c3d4e5f6ghijklmnop1234567890abcdef",
"hostname": "PC-VENDAS-001",
"hwid": "550e8400e29b41d4a716446655440000"
}'
{
"status": "registered",
"apiKey": "ak_5f1b3c8e9d2a4b6c7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b",
"machineId": 42
}
Importante: A apiKey é retornada apenas uma vez. O agente deve salvá-la em config.ini.
A ApiKey identifica uma máquina específica após registro.
C:\T2Mark\config.iniak_5f1b3c8e9d2a4b6c7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b
| Parte | Significado |
|---|---|
ak_ |
Prefixo (identifica como ApiKey) |
| Resto | 64 caracteres hexadecimais (hash SHA-256) |
Servidor recebe: ak_5f1b3c8e9d2a4b6c7e8f...
Servidor armazena: SHA-256(ak_5f1b3c8e9d2a4b6c7e8f...)
Servidor compara: SHA-256(chave_enviada) == SHA-256_armazenado
Benefício: Se banco de dados for comprometido, ApiKey original não é exposta.
Na máquina do agente:
C:\T2Mark\config.ini
[Agent]
ApiKey=ak_5f1b3c8e9d2a4b6c7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b
Envie a ApiKey no header X-API-Key:
curl -X GET https://t2mark.setor9.net/api/policy \
-H "X-API-Key: ak_5f1b3c8e9d2a4b6c7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b"
| Header | Valor | Exemplo |
|---|---|---|
X-API-Key |
ApiKey da máquina | ak_5f1b3c... |
Content-Type |
(se houver corpo) | application/json |
curl -X GET https://t2mark.setor9.net/api/policy \
-H "X-API-Key: ak_5f1b3c8e9d2a4b6c7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b" \
-H "User-Agent: T2Mark-Agent/1.0" \
-H "Accept: application/json"
┌─ PRIMEIRA VEZ ─────────────────────────────────────┐
│ │
│ 1. Admin cria conta T2Mark │
│ ↓ Recebe TenantKey (gerado automaticamente) │
│ │
│ 2. Admin baixa instalador T2Mark-Setup.exe │
│ ↓ Instalador contém TenantKey embutida │
│ │
│ 3. Usuário executa instalador │
│ ↓ Agente começa, faz POST /api/register │
│ ↓ Envia TenantKey │
│ │
│ 4. Servidor valida TenantKey │
│ ↓ Cria registro da máquina │
│ ↓ Gera ApiKey aleatória (64 chars) │
│ ↓ Armazena SHA-256(ApiKey) no banco │
│ ↓ Retorna ApiKey em texto plano (única vez) │
│ │
│ 5. Agente recebe ApiKey │
│ ↓ Salva em C:\T2Mark\config.ini │
│ ↓ Deleta TenantKey (não precisa mais) │
│ │
└─────────────────────────────────────────────────────┘
┌─ OPERAÇÕES NORMAIS ────────────────────────────────┐
│ │
│ 6. Agente faz polling: │
│ GET /api/policy │
│ Header: X-API-Key: ak_5f1b3c... │
│ ↓ Servidor valida ApiKey (compara hash) │
│ ↓ Retorna política atual │
│ │
│ 7. Agente envia heartbeat: │
│ POST /api/heartbeat │
│ Header: X-API-Key: ak_5f1b3c... │
│ ↓ Servidor marca máquina como "online" │
│ │
│ 8. Agente se desinstala: │
│ POST /api/unregister │
│ Header: X-API-Key: ak_5f1b3c... │
│ ↓ Servidor revoga ApiKey │
│ ↓ Remove máquina da lista │
│ │
└─────────────────────────────────────────────────────┘
ak_?)Requisição HTTP
↓
Header X-API-Key presente?
↓ Não → 401 Unauthorized
↓ Sim
Formato válido (ak_...)?
↓ Não → 400 Bad Request
↓ Sim
SHA-256(apikey) no banco?
↓ Não → 401 Unauthorized
↓ Sim
Máquina ativa?
↓ Não → 403 Forbidden (machine blocked)
↓ Sim
Tenant ativo?
↓ Não → 403 Forbidden (tenant disabled)
↓ Sim
✓ Autorizado — Processa requisição
Causa: ApiKey ausente, inválido ou revogado
Exemplos:
- Máquina fez unregister (ApiKey foi revogado)
- ApiKey está corrompido em config.ini
- Máquina foi desinstalada e reinstalada (novo ApiKey gerado)
- Máquina registrada em outro tenant
Resposta:
{
"error": "Unauthorized",
"message": "Invalid or missing API key"
}
Causa: Autenticação OK, mas permissão negada
Exemplos:
- Máquina está desativada (admin desativou no painel)
- Tenant está desativado (assinatura expirou)
- Máquina foi bloqueada (muito spam/tentativas erradas)
Resposta:
{
"error": "Forbidden",
"message": "Machine or tenant is disabled"
}
Causa: Máquina já registrada (ao tentar registrar novamente)
Exemplos:
- Mesmo HWID já foi registrado antes
- Agente tenta registrar sem verificar se já existe
Resposta (em POST /api/register):
{
"status": "reactivated",
"apiKey": "ak_novo_hash...",
"machineId": 42
}
(Gera nova ApiKey, revoga a anterior)
**** em logs)?apikey=...)Se suspeitar que a ApiKey foi comprometida:
No painel:
Na máquina:
# Opção 1: Reinstalar agente (recebe novo ApiKey)
Core.exe -uninstall
# Baixe e instale novamente
# Opção 2: Aguardar pool de re-registro
# Agente verifica a cada 24h se precisa re-registrar
TENANTKEY:
- Primeira vez (registro)
- No instalador
- Identifica empresa
- Descartado após uso
APIKEY:
- Depois do registro
- Em config.ini
- Identifica máquina
- Usado em todas as operações
- Enviado em: X-API-Key header
FLUXO:
1. POST /api/register (envia TenantKey)
2. Recebe ApiKey
3. Armazena em config.ini
4. Usa X-API-Key: ak_... em todas as requisições
ERROS:
401 → ApiKey inválido/ausente
403 → Máquina/tenant desativado
409 → Máquina já registrada