DOCS

Authentification OAuth 2.0

Authentifiez vos services backend avec Zonos via la cryptographie à clé asymétrique — sans secrets partagés.

Zonos prend en charge l'authentification machine à machine via OAuth 2.0 JWT Bearer Token Grant (RFC 7523). Votre service signe un JWT à courte durée de vie avec votre clé privée RSA ; Zonos le vérifie à l'aide de votre clé publique enregistrée et renvoie un jeton Bearer limité à votre organisation.

Résumé du flux :

  1. Générez une paire de clés RSA et enregistrez votre clé publique auprès de Zonos.
  2. À l'exécution, signez une assertion JWT avec votre clé privée et envoyez-la en POST au point de terminaison de jeton.
  3. Zonos renvoie un jeton d'accès à courte durée de vie.
  4. Incluez le jeton d'accès sous la forme Authorization: Bearer <token> sur chaque requête API.

Cycle de vie et mise en cache des jetons 

Les jetons d'accès expirent par défaut après 5 minutes. Mettez le jeton en cache et actualisez de manière proactive — ne demandez pas un nouveau jeton à chaque appel API. Chaque actualisation nécessite une nouvelle assertion JWT signée.

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"]

Référence des erreurs 

Toutes les erreurs suivent le format de réponse d'erreur OAuth 2.0 (RFC 6749 §5.2) :

1{
2 "error": "invalid_grant",
3 "error_description": "JWT assertion has expired"
4}
Statut HTTPerrorCause
400unsupported_grant_typegrant_type n'était pas urn:ietf:params:oauth:grant-type:jwt-bearer
400invalid_requestChamp manquant ou malformé
401invalid_grantSignature invalide, assertion expirée, organisation inconnue ou clé non enregistrée
500server_errorErreur interne — contactez le support Zonos si le problème persiste

Causes courantes de invalid_grant :

  • exp est dans le passé — assurez-vous que l'horloge système est synchronisée NTP
  • aud n'est pas exactement "zonos-auth"
  • iss ne correspond pas à votre Organization ID enregistré
  • La clé publique a été renouvelée mais pas encore mise à jour auprès de Zonos

Bonnes pratiques de sécurité 

  • Protégez votre clé privée. Stockez-la dans un gestionnaire de secrets dédié — jamais dans le contrôle de source, les variables d'environnement ou les journaux.
  • Gardez les assertions à courte durée de vie. 60–300 secondes est la norme ; il n'y a aucune raison d'en émettre de plus longues.
  • Incluez jti. Une valeur unique par assertion permet la détection de rejeu côté serveur.
  • Renouvelez les paires de clés périodiquement. Enregistrez une nouvelle clé publique auprès de Zonos avant de révoquer l'ancienne pour éviter les interruptions.
  • Ne journalisez jamais les valeurs access_token ou assertion. Traitez les deux comme des identifiants.

Cette page a-t-elle été utile?