Qu'est-ce que la sécurité des clés d'API ?

Mis à jour : septembre 2026

Une clé d’API est une chaîne unique qui identifie l’app appelant une API ; la sécurité des clés d’API consiste à en limiter la portée et à la protéger. La précision d’abord, car la plupart des définitions la brouillent : une clé identifie l’application, n’offre qu’une authentification faible (c’est un identifiant bearer — qui la détient, l’incarne) et porte une autorisation grossière (la portée qui lui a été attachée à sa création). Les utilisateurs sont authentifiés par des tokens ; les apps sont identifiées par des clés — et aucune RFC ne définit la clé d’API. C’est une convention, et c’est exactement pour cela que sa sécurité dépend de votre configuration, pas de la garantie d’un standard.

Points clés

QuestionRéponse
Ce que fait une cléIdentifie l’app · mesure l’usage · ancre les rate limits
Les deux espècesClés publiables (faites pour être livrées) vs. clés secrètes (catégorie mot de passe)
L’échelle du stockageCodée en dur : jamais → variables d’environnement : le minimum → gestionnaire de secrets : le standard
La loi d’airainTout ce qui est dans un bundle client est public — prévoyez l’extraction
Réponse à une fuiteRévoquer → remplacer → purger l’historique → auditer — en minutes, pas en jours

La requête, et les deux types de clés

GET /v1/search?q=espresso HTTP/1.1
Host: api.example.com
X-Api-Key: pk_live_7f2c…      ← dans un HEADER — les URL finissent dans les logs,
                                 l'historique et les referrers

Deux espèces différentes partagent un même nom :
clé publiable     livrée dans les bundles web/mobiles · identifie l'app,
                  mesure l'usage · conçue en sachant qu'elle SERA extraite
clé secrète       côté serveur uniquement · identifiant bearer, niveau mot de passe ·
                  quiconque la détient, c'est vous

Le modèle publiable en pratique — des clés qui sont livrées parce que la sécurité se joue ailleurs :

// JavaScript / Node.js — Back4app JS SDK
// Publishable keys: safe to ship BECAUSE authorization lives server-side
Parse.initialize(APP_ID, JS_KEY); // both ship in your bundle — by design
Parse.serverURL = 'https://parseapi.back4app.com';
// What protects data isn't key secrecy — it's CLPs + ACLs checked per request

// The one key that never ships: the Master Key bypasses every ACL and CLP.
// Server-only (Cloud Code / trusted backend), read from env or secret manager.

Clés d’API vs. tokens vs. JWT

Clé d’APIAccess token OAuthJWT
IdentifieL’applicationL’utilisateur (et l’autorisation accordée)Ce que disent ses claims
ÉmissionUne fois, par un administrateurÀ chaque connexion, via un fluxC’est un format, pas une émission
Durée de vieJusqu’à la rotation (souvent jamais)De quelques minutes à quelques heuresCe que dit exp
PortéeFixée à la créationPortées par autorisationDéfinie par les claims
StandardAucun — conventionOAuth 2.0RFC 7519
Le bon usageIdentification de serveur à serveur, comptageAccès API délégué par l’utilisateurTransport de claims signés

La comparaison se résume en une phrase à retenir : les clés identifient des apps ; les tokens authentifient des utilisateurs. Utiliser une clé là où l’identité de l’utilisateur compte revient à reconstruire l’authentification en moins bien ; utiliser des tokens par utilisateur pour compter l’usage anonyme d’une app, c’est de la machinerie sans objet.

Où vivent les clés : l’échelle du stockage

Codée en dur — jamais. Le code source est copié, forké et commité ; git se souvient pour toujours, et les bots de détection de secrets trouvent les clés dans les commits publics en quelques minutes. Les variables d’environnement — le minimum, avec la réserve sur laquelle le cheat sheet de l’OWASP est sans détour : les variables d’environnement fuient par les logs d’erreur, les dumps de processus et les définitions de conteneurs ; elles gardent les secrets hors de git, pas hors de danger. Un gestionnaire de secrets — le standard d’équipe : chiffré au repos, à accès contrôlé par service, audité à chaque lecture, avec une rotation centralisée (les options open-source incluent Vault, SOPS et Infisical). Ajoutez l’hygiène qui rend les fuites survivables : des clés générées de façon cryptographiquement aléatoire, préfixées (style sk_live_…) pour que les scanners les reconnaissent, hachées au repos côté fournisseur comme des mots de passe, une clé par app et par environnement — et une détection de secrets (gitleaks, trufflehog) branchée sur la CI, pour que le commit qui divulgue une clé échoue avant d’atterrir.

Le problème côté client, en toute honnêteté

Toutes les explications disent “ne mettez pas de clés secrètes dans le code client” ; presque aucune ne dit la seconde moitié : votre bundle est public. Le JavaScript web est lisible par définition ; les binaires mobiles sont décompressés et leurs chaînes extraites en routine ; l’obfuscation fait passer l’effort de quelques minutes à quelques heures, une seule fois. Deux conséquences en découlent. D’abord, les seules clés qui ont leur place dans un client sont les clés publiables — conçues pour identifier, pas pour protéger, avec la véritable autorisation appliquée côté serveur à chaque requête. Ensuite, quand un client doit utiliser un service tiers protégé par une clé secrète, le secret reste derrière votre propre backend — le pattern proxy :

Pattern proxy qui garde les clés secrètes côté serveurL'app cliente ne détient qu'une clé publiable et appelle votre backend. Le backend, qui détient la clé secrète dans un gestionnaire de secrets, appelle l'API tierce et renvoie les résultats, si bien que le secret n'est jamais livré au client.

votre API

X-Api-Key: sk_live_…

ne trouve rien
qui vaille la peine d'être volé

App cliente
clé publiable uniquement

Votre backend
clé secrète issue du
gestionnaire de secrets

API tierce

Un attaquant décompresse le bundle

L'app cliente ne détient qu'une clé publiable et appelle votre backend. Le backend, qui détient la clé secrète dans un gestionnaire de secrets, appelle l'API tierce et renvoie les résultats, si bien que le secret n'est jamais livré au client.

Quand une clé fuite : le runbook

Le temps compte — des bots surveillent les dépôts publics et exploitent les clés commitées en une à cinq minutes. Dans l’ordre : 1 · Révoquez la clé chez le fournisseur — avant d’enquêter, avant le stand-up. 2 · Remplacez — émettez la nouvelle clé et déployez-la par la configuration, pas par le code. 3 · Purgez — retirez-la du code source et de l’historique git ; une ligne supprimée survit dans chaque clone. 4 · Auditez — les logs du fournisseur sur la fenêtre de fuite : ce qui a été lu, créé, dépensé. 5 · Élargissez — tout ce qui cohabitait avec la clé (le même .env, le même dépôt) est présumé compromis ; faites-le tourner aussi. Et la réserve qui sépare une vraie réponse d’un rituel : la révocation arrête l’usage futur — elle ne fait pas revenir les données exfiltrées. Ce qui a été pris pendant la fenêtre est un incident, pas une rotation.

La rotation sans interruption de service

La rotation plafonne la valeur des fuites non détectées — une clé volée à qui il reste 60 jours n’est pas le même actif qu’une clé valide pour toujours. Une cadence fondée sur le risque : 30 à 90 jours pour les clés à portée large ou partagées à l’extérieur, jusqu’à un an pour les clés internes à portée étroite, immédiatement en cas de soupçon d’exposition ou de départ de quiconque l’a détenue. Le geste sans interruption, c’est le chevauchement à double clé : émettez la nouvelle clé pendant que l’ancienne reste valide, migrez les déploiements à votre rythme, puis révoquez l’ancienne — la même astuce que les systèmes de refresh tokens formalisent. Les régimes de conformité exigent de plus en plus ce calendrier ; l’argument de sécurité n’en a jamais eu besoin.

Cas d’usage courants

  • Intégration de serveur à serveur — l’habitat naturel de la clé : un service qui s’identifie auprès d’un autre.
  • Comptage de l’usage et facturation — la clé comme l’unité que les fournisseurs comptent, limitent et facturent.
  • Identification publiable des clients — des bundles d’apps qui transportent des clés faites pour être exposées, avec l’autorisation ailleurs.
  • Séparation des environnements — des clés de test et de production qui tiennent les accidents de staging à l’écart des données de production.
  • Confinement des abus — des rate limits par clé et la révocation comme leviers de contrôle du rayon d’impact.

Quel identifiant devriez-vous utiliser ? Matrice de décision

SituationChoisissez
Un backend qui appelle une API tierceUne clé secrète, dans un gestionnaire de secrets
Identifier votre app depuis le web ou le mobileUne clé publiable + une autorisation côté serveur
Agir au nom d’un utilisateur connectéDes tokens OAuth, pas des clés
Des claims signés entre servicesDes JWT
Un client a besoin d’un service à clé secrèteVotre backend comme proxy — le secret n’est jamais livré
De machine à machine avec une auth de type utilisateurLe flux client credentials d’OAuth

Limites et trade-offs

  • Les clés ne prouvent pas la possession. Une chaîne bearer n’offre aucun lien cryptographique avec l’appelant ; pour une authentification de service à haut niveau d’assurance, le TLS mutuel et les requêtes signées existent pour une bonne raison.
  • Les identifiants statiques vieillissent mal. Sans expiration, chaque fuite reste ouverte jusqu’à ce que quelqu’un la remarque ; la rotation est le substitut manuel du cycle de vie que les tokens obtiennent gratuitement.
  • Les portées grossières en partagent trop. Une clé aux permissions larges est un passe-partout ; une portée granulaire coûte de l’administration et rapporte en rayon d’impact.
  • Les clés identifient, elles n’authentifient pas. Bâtir une confiance au niveau utilisateur sur une identification au niveau app, c’est le pattern de broken authentication que les auditeurs cherchent en premier.
  • La dérive de l’inventaire est réelle. Les clés inutilisées d’anciennes intégrations restent valides jusqu’à leur suppression — les cousins identifiants-zombies des endpoints zombies.

Les clés d’API sur Back4app

Back4app est une plateforme open-source de Backend as a Service (BaaS) qui combine une base de données gérée, des API REST et GraphQL générées automatiquement, l’authentification, le stockage de fichiers et des fonctions serverless avec Cloud Code. Son modèle de clés est la section côté client rendue concrète : l’Application ID et les clés client sont livrés dans vos apps par conception — la documentation de Back4app est explicite : les clés client ne sont pas des mécanismes de sécurité — parce que l’autorisation n’en dépend jamais : chaque requête est vérifiée côté serveur par rapport aux permissions au niveau de la classe et aux ACL, si bien qu’une clé extraite donne à un attaquant exactement ce qu’obtient un utilisateur anonyme. Le seul vrai secret est la Master Key, qui contourne toutes les ACL et CLP : elle vit uniquement côté serveur — Cloud Code, backends de confiance, variables d’environnement ou gestionnaire de secrets — et jamais dans un bundle. Les onglets de code montrent cette répartition en pratique ; le runbook ne s’applique qu’à la master key, et c’est tout l’intérêt : un seul secret à garder, c’est une posture de sécurité ; quarante, c’est un tableur.

Questions fréquentes

Qu'est-ce qu'une clé d'API ?

Une chaîne unique qu'un fournisseur d'API délivre à une application enregistrée et qui accompagne chaque requête — idéalement dans un header — pour que le serveur puisse identifier l'appelant, appliquer ses permissions, mesurer l'usage et imposer des rate limits. Point notable : aucun standard ne la définit. Les clés d'API sont une convention, pas un protocole.

Une clé d'API est-elle un mot de passe ?

Une clé secrète relève fonctionnellement de la catégorie des mots de passe : c'est un identifiant bearer, donc quiconque la détient est considéré comme vous — même discipline de stockage, mêmes conséquences en cas de fuite. Les différences : les clés identifient des applications plutôt que des personnes, et beaucoup n'expirent jamais tant que vous ne les faites pas tourner.

Quelle est la différence entre une clé d'API et un token ?

Les clés identifient des apps ; les tokens authentifient des utilisateurs. Une clé est statique, générée par un administrateur et liée à une application ; un access token OAuth est émis à la connexion, de courte durée, renouvelable, et porte les permissions d'un utilisateur précis. L'identification de serveur à serveur convient aux clés ; tout ce qui est propre à un utilisateur relève des tokens.

Où stocker les clés d'API ?

Jamais dans le code source. Les variables d'environnement issues d'un fichier non versionné sont le minimum — avec la réserve qu'elles fuient par les logs, les dumps de processus et les définitions de conteneurs — et un gestionnaire de secrets est le standard d'équipe : chiffré au repos, à accès contrôlé, audité et compatible avec la rotation.

Puis-je mettre une clé d'API dans du code frontend ou mobile ?

Seulement une clé publiable conçue pour cela. Tout ce qui se trouve dans un bundle JavaScript ou un binaire d'application est public — l'extraction est routinière et l'obfuscation ne fait que la ralentir. Les clés secrètes restent côté serveur ; quand un client a besoin d'un service protégé par une clé secrète, faites passer l'appel par votre propre backend.

Que faire quand une clé d'API a fuité ?

Immédiatement : révoquez la clé, déployez une remplaçante, purgez-la du code et de l'historique git, auditez les logs d'usage à la recherche d'abus, et faites tourner tout ce qui était stocké au même endroit. Agissez vite — des bots testent les clés commitées dans des dépôts publics en quelques minutes — et rappelez-vous que la révocation arrête l'usage futur, pas les données déjà dérobées.

À quelle fréquence faire tourner les clés d'API ?

Selon le risque : tous les 30 à 90 jours pour les clés à portée large ou exposées à l'extérieur, plus longtemps pour les clés internes à faible risque, et immédiatement en cas de soupçon d'exposition ou de départ d'un membre de l'équipe. La rotation sans interruption repose sur une fenêtre de chevauchement pendant laquelle l'ancienne et la nouvelle clé sont toutes deux valides, le temps que les déploiements suivent.

Comment les clés d'API fuient-elles ?

Par ordre de notoriété : commitées dans des dépôts git, livrées dans des bundles clients et des binaires mobiles, placées dans des URL que les logs serveur et l'historique du navigateur capturent, imprimées dans les logs applicatifs et de CI, et collées dans des chats et des tickets. Chaque vecteur est évitable, et c'est précisément ce qui rend la liste déprimante.

Termes associés

À comparer avec

Lectures recommandées

Prêt à construire votre backend ?

Lancez votre projet sur Back4app en quelques minutes — base de données, authentification, API et Cloud Code inclus. Sans carte bancaire.

Écrit et révisé par Back4app Engineering, Back4app Engineering · Publié le 2026-09-11