Pular para o conteúdo principal

POST /api/external-auth/token

Troca a API key fixa do fornecedor por um par de tokens JWT + refresh token.

Request

Headers

HeaderObrigatórioDescrição
x-api-keyAPI 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"
}
CampoTipoDescrição
AccessTokenstringJWT assinado com HMAC-SHA256. Use no header Authorization: Bearer
RefreshTokenstringToken opaco de 512 bits. Guarde com segurança — exibido apenas uma vez
TokenTypestringSempre "Bearer"
ExpiresInintSegundos até o access token expirar (padrão: 900 = 15 min)
IssuedAtdatetimeTimestamp UTC de emissão
ScopestringEscopos concedidos ao fornecedor (space-separated)

401 Unauthorized

{
"Error": "invalid_client",
"ErrorDescription": "Invalid API key."
}

Retornado quando:

  • O header x-api-key está 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:

ClaimTipoExemplo
substring (UUID)"a1b2c3d4-..." — ID do fornecedor
jtistringUUID único por token (proteção contra replay)
iatintUnix timestamp de emissão
supplier_idstringMesmo que sub
supplier_namestring"Acme Supplier"
scopestring"external.read external.orders.read"
permissionsstring[]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.