DOCS

Autenticação OAuth 2.0

Autentique os seus serviços de back-end na Zonos com criptografia de chave assimétrica — sem segredos partilhados.

A Zonos suporta autenticação entre máquinas através de OAuth 2.0 JWT Bearer Token Grant (RFC 7523). O seu serviço assina um JWT de curta duração com a sua chave privada RSA; a Zonos verifica-o com a sua chave pública registada e devolve um token Bearer com âmbito limitado à sua organização.

Resumo do fluxo:

  1. Gere um par de chaves RSA e registe a sua chave pública na Zonos.
  2. Em tempo de execução, assine uma asserção JWT com a sua chave privada e envie-a por POST para o endpoint de token.
  3. A Zonos devolve um token de acesso de curta duração.
  4. Inclua o token de acesso como Authorization: Bearer <token> em todos os pedidos à API.

Ciclo de vida e cache do token 

Por predefinição, os tokens de acesso expiram ao fim de 5 minutos. Guarde o token em cache e renove-o de forma proativa — não peça um novo token em cada chamada à API. Cada renovação requer uma nova asserção JWT assinada.

1import time, requests
2 
3_cache = {"access_token": None, "expires_at": 0}
4 
5def get_access_token():
6 if time.time() < _cache["expires_at"] - 30:
7 return _cache["access_token"]
8 
9 assertion = build_jwt_assertion()
10 data = requests.post(
11 "https://auth.zonos.com/oauth/token",
12 json={
13 "grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer",
14 "assertion": assertion,
15 },
16 ).json()
17 
18 _cache["access_token"] = data["access_token"]
19 _cache["expires_at"] = time.time() + data["expires_in"]
20 return _cache["access_token"]

Referência de erros 

Todos os erros seguem o formato de resposta de erro do OAuth 2.0 (RFC 6749 §5.2):

1{
2 "error": "invalid_grant",
3 "error_description": "JWT assertion has expired"
4}
Estado HTTP↕error↕Causa↕
400unsupported_grant_typegrant_type não era urn:ietf:params:oauth:grant-type:jwt-bearer
400invalid_requestCampo em falta ou mal formado
401invalid_grantAssinatura inválida, asserção expirada, organização desconhecida ou chave não registada
500server_errorErro interno — contacte o suporte da Zonos se persistir

Causas comuns de invalid_grant:

  • exp está no passado — certifique-se de que o relógio do seu sistema está sincronizado por NTP
  • aud não é exatamente "zonos-auth"
  • iss não corresponde ao seu ID de organização registado
  • A chave pública foi rodada, mas ainda não foi atualizada junto da Zonos

Boas práticas de segurança 

  • Proteja a sua chave privada. Guarde-a num gestor de segredos dedicado — nunca no controlo de versões, em variáveis de ambiente ou em registos.
  • Mantenha as asserções de curta duração. 60–300 segundos é o habitual; não há motivo para emitir asserções mais longas.
  • Inclua jti. Um valor único por asserção permite a deteção de repetições do lado do servidor.
  • Rode os pares de chaves periodicamente. Registe uma nova chave pública na Zonos antes de revogar a antiga, para evitar tempo de inatividade.
  • Nunca registe valores de access_token ou assertion em logs. Trate ambos como credenciais.

Esta página foi útil?