Principes

  1. Une clé par service / environnement. Pas une clé partagée entre dev et prod, ni entre microservices indépendants. Si une clé fuite, vous révoquez uniquement le service impacté.
  2. Scopes minimum. Un service qui ne fait que créer des PaymentIntents → payment_intents:write uniquement. Pas payouts:write.
  3. IP allowlist pour les serveurs avec IP statique (AWS NAT, OVH, Hetzner).
  4. Rotation périodique : tous les 6-12 mois minimum.
  5. 2FA active sur le compte du membre qui gère les clés.

Stockage

Si une clé est accidentellement commitée :
  1. Révoquez immédiatement depuis le dashboard (TOTP requis)
  2. Créez une nouvelle clé
  3. Rotez dans tous vos environnements
  4. Si la fuite est publique (GitHub public), faites un git filter-repo pour purger l’historique, mais traitez d’abord la clé comme compromise

Format

Le format est validé côté serveur : sk_live_ ou sk_test_ suivi de 64 caractères hexadécimaux. Toute autre forme renvoie 401 Invalid API key.

Granularité avancée

Pour un setup avec backend multi-tenant (vous opérez plusieurs marchands IzichangePay), gérez une clé par tenant côté votre app et utilisez-la pour les appels à ce tenant. Pas de risque de cross-contamination.
Les sessions dashboard sont indépendantes des clés API. Une fuite de clé n’expose pas votre compte au login dashboard : le mot de passe et la 2FA restent requis.

Audit

Chaque action de gestion (create, rotate, révoque, IP change) est tracée dans Paramètres → Audit log avec :
  • Qui (membre + IP)
  • Quoi (action + ID de la clé)
  • Quand (timestamp)
  • Avant / après (pour les modifications)