Chaves de API
Uma chave de API é a credencial de um consumidor. Ela é mostrada uma única vez, no momento da emissão, e depois só aparece mascarada.
Formato
nnag_ + 43 caracteres [0-9A-Za-z]
São 32 bytes aleatórios codificados em base62 — 256 bits de entropia. Na listagem e
em qualquer leitura posterior você vê apenas nnag_****<4 últimos> (por exemplo
nnag_****a9Zx) e o prefixo exibível nnag_XXXX.
Como o produto guarda
| Onde | O quê | Para quê |
|---|---|---|
| Verificação | um resumo criptográfico da chave | busca e verificação em cada requisição |
| Reconstrução | a chave cifrada, com uma chave de criptografia do produto | reprovisionar o runtime se a configuração dele se perder; apagada depois que a revogação é confirmada nas réplicas |
| Runtime | credencial cifrada no armazenamento de configuração do gateway, com chave própria | autenticar a requisição |
Nunca há texto claro em disco nem em log. A chave cifrada existe porque, se o runtime perder a configuração, o gateway precisa reconstruí-la a partir da base, inclusive as chaves.
Emitir
curl -sS -X POST "$BASE/v1/consumers/$CONSUMER_ID/credentials" \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: emissao-chave-2026-10-22' \
-d '{"name":"producao","expires_at":"2027-10-22T00:00:00Z"}'
Resposta 201 — o campo key aparece só aqui:
{
"id": "0192f3a4-1111-7000-8000-000000000001",
"consumer_id": "0192f3a4-2222-7000-8000-000000000002",
"name": "producao",
"prefix": "nnag_7Hq2",
"masked_key": "nnag_****a9Zx",
"status": "ACTIVE",
"expires_at": "2027-10-22T00:00:00Z",
"key": "nnag_EXEMPLO…"
}
A resposta vem com Cache-Control: no-store. Se a mesma requisição for repetida com a
mesma Idempotency-Key, você recebe os metadados de novo — não a chave. Por
isso: guarde a chave antes de fechar a tela.
Rotação sem queda
O caminho é sempre "emitir a nova, migrar, revogar a antiga" — nunca o contrário:
- Emita uma segunda chave para o mesmo consumidor (até 5 ativas).
- Distribua a nova chave para a aplicação e confirme que ela está em uso.
- Revogue a antiga.
As duas funcionam simultaneamente, então não existe janela de erro. A propagação da nova chave e da revogação para as máquinas do gateway é feita por observação da configuração; num ambiente real, conte com segundos.
Revogar
DELETE /v1/consumers/{id}/credentials/{credentialId} marca REVOKED e espera
alguns segundos (10 s por padrão) a confirmação de ausência da credencial em
todas as máquinas do gateway:
{
"id": "0192f3a4-1111-7000-8000-000000000001",
"consumer_id": "0192f3a4-2222-7000-8000-000000000002",
"status": "REVOKED",
"revoked_at": "2026-10-22T12:05:00Z",
"propagation": {"confirmed": true, "replicas": 2, "confirmed_replicas": 2}
}
Se confirmed vier false, a revogação já está registrada e o runtime continua
sendo atualizado; o campo só informa que a confirmação não chegou dentro da janela.
Consulte de novo em instantes.
Duas garantias que valem saber:
- repetir o
DELETEnão espera de novo: só a transiçãoACTIVE → REVOKEDaguarda a confirmação; as chamadas seguintes respondem na hora com o estado atual; - confirmada a ausência em todas as máquinas, o texto cifrado da chave é apagado
do banco. A linha continua existindo para histórico e auditoria, com
masked_key.
Chave vazou: o que fazer
- Revogue a chave (o
DELETEno recurso da credencial). - Confirme
propagation.confirmed = true. - Emita uma chave nova e redistribua.
- Se a chave estava em código público, considere suspender o consumidor inteiro
(
PATCH {"status":"SUSPENDED"}) enquanto investiga. - Registre o incidente internamente.
Uma chave revogada não volta: o runtime é derivado do banco, e o banco só readmite
credencial ACTIVE.
Não "rotacione" sem revogar: duas chaves ativas ao mesmo tempo é o desenho para migração, não para remediação.
Expiração
expires_at é opcional, mas recomendado. A validade máxima aceita é de 2 anos.
Quando a data passa, a chave deixa de autenticar e o estado vira EXPIRED. Renovar =
emitir outra.
Boas práticas
- Guarde a chave em cofre de segredos, nunca no repositório.
- Uma chave por ambiente por aplicação (
producao,homologacao) — nunca uma chave compartilhada entre serviços, porque a revogação fica impossível sem quebrar todo mundo. - Nomeie as chaves (
name) com o que elas identificam:producao,integracao-fulano,job-relatorio. - Não coloque a chave na URL: o gateway remove o argumento reservado e a chave não autentica, além de vazar em logs.
- Se o consumidor usa o cabeçalho
Ocp-Apim-Subscription-Key(compatibilidade com Azure API Management), escolha esse nome na política de segurança. O gateway aceita apenas o cabeçalho escolhido: o outro é removido antes da autenticação.
Próximos passos
- Consumidores: a identidade que possui as chaves.
- Segurança e autenticação: o cabeçalho de chave e os demais modos.
- Erros e diagnóstico:
401e403na prática.
Was this page helpful?
Report a problem on this pageDo not send passwords, keys, tokens, or customer data.