POST /api/external-auth/token
Troca a API key fixa do fornecedor por um par de tokens JWT + refresh token.
Request
Headers
| Header | Obrigatório | Descrição |
|---|---|---|
x-api-key | ✅ | API key fixa do fornecedor |
Não há body nesta requisição.
curl -s -X POST https://servicos.ifollowtech.com.br/api/external-auth/token \
-H "x-api-key: SUA_API_KEY_AQUI"
Response
200 OK
{
"AccessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"RefreshToken": "dGhpcyBpcyBhIHNhbXBsZSByZWZyZXNoIHRva2Vu",
"TokenType": "Bearer",
"ExpiresIn": 900,
"IssuedAt": "2026-04-23T14:00:00Z",
"Scope": "external.read external.orders.read"
}
| Campo | Tipo | Descrição |
|---|---|---|
AccessToken | string | JWT assinado com HMAC-SHA256. Use no header Authorization: Bearer |
RefreshToken | string | Token opaco de 512 bits. Guarde com segurança — exibido apenas uma vez |
TokenType | string | Sempre "Bearer" |
ExpiresIn | int | Segundos até o access token expirar (padrão: 900 = 15 min) |
IssuedAt | datetime | Timestamp UTC de emissão |
Scope | string | Escopos concedidos ao fornecedor (space-separated) |
401 Unauthorized
{
"Error": "invalid_client",
"ErrorDescription": "Invalid API key."
}
Retornado quando:
- O header
x-api-keyestá ausente. - A API key não corresponde a nenhum fornecedor ativo.
Segurança
A API key é verificada com comparação em tempo constante (sem timing oracle). A resposta de erro é idêntica para "key errada" e "fornecedor não existe" — para não vazar informação.
Claims do JWT
O access token contém os seguintes claims:
| Claim | Tipo | Exemplo |
|---|---|---|
sub | string (UUID) | "a1b2c3d4-..." — ID do fornecedor |
jti | string | UUID único por token (proteção contra replay) |
iat | int | Unix timestamp de emissão |
supplier_id | string | Mesmo que sub |
supplier_name | string | "Acme Supplier" |
scope | string | "external.read external.orders.read" |
permissions | string[] | Um claim por escopo: ["external.read", "external.orders.read"] |
Vida útil
O access token expira em 15 minutos por padrão. Use o refresh token para renová-lo sem precisar da API key novamente.