Une clé API qui fuit coûte de l’argent
Une clé API est une chaîne secrète qui prouve qu’une requête vient de vous. Un fournisseur de modèle facture souvent votre compte pour chaque appel qui la porte.
Des développeurs laissent fuir leurs clés en les tapant dans le code, puis en le publiant sur Git. Des robots cherchent exactement cela : une clé qui fuit est une facture et un risque.
À la fin de cette leçon
Remarque
Je peux garder une clé hors de mon code et de mon historique Git.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Clé API | une chaîne secrète qui prouve qu’une requête est la vôtre | |
| Variable d’environnement | une valeur nommée donnée à un programme depuis l’extérieur de son code | MA_CLE_API |
| Le fichier .env | un fichier texte de lignes NOM=valeur pour votre machine | |
| Le fichier .gitignore | une liste de fichiers que Git ne doit jamais suivre | |
| Renouveler | créer une nouvelle clé et annuler l’ancienne |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Dans ce laboratoire, votre code n’a aucune clé
Votre script envoie l’en-tête authorization: Bearer lab. Le mot lab est un espace réservé, pas une clé. À la sortie, la plateforme le remplace par votre vrai jeton et choisit le modèle.
La clé n’est donc jamais dans votre code et vous ne la voyez jamais. Sur un vrai projet, c’est vous qui la détenez.
Appeler un modèle sans clé
docker exec -w /home/node/project agent node -e "const u=(process.env.AI_URL||'http://ai:4000')+'/v1/chat/completions';(async()=>{const entetes={'content-type':'application/json',authorization:'Bearer lab'};console.log('En-tête d’autorisation dans mon code : '+entetes.authorization);try{const r=await fetch(u,{method:'POST',headers:entetes,body:JSON.stringify({model:'lab',messages:[{role:'user',content:'En une phrase, pourquoi une clé API doit-elle rester hors du code ?'}],max_tokens:60})});const j=await r.json();if(r.ok===false)throw new Error(r.status+' '+j.error.message);console.log('Modèle : '+j.choices[0].message.content)}catch(e){console.log('Aucune réponse du modèle ('+e.message+'). Exemple enregistré :');console.log('Modèle : Quiconque lit le code peut utiliser la clé et dépenser votre argent.')}})()"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Une vraie clé vit dans l’environnement
Un vrai fournisseur vous donne une longue clé. Ne la tapez jamais dans un fichier que Git suit. Mettez-la dans une variable d’environnement et lisez-la dans le code avec process.env.MA_CLE_API.
Sur votre machine, gardez les variables dans un fichier .env et listez ce fichier dans .gitignore, pour que Git ne le voie jamais.
Écrire un .env et un .gitignore de démonstration
docker exec -w /home/node/project agent sh -c "mkdir -p demo-cles && printf 'EXEMPLE_CLE_API=pas-une-vraie-cle-123\n' > demo-cles/.env && printf '.env\n' > demo-cles/.gitignore"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Lire le .env et masquer la valeur
docker exec -w /home/node/project agent node -e "const fs=require('fs');const nl=String.fromCharCode(10);for(const ligne of fs.readFileSync('demo-cles/.env','utf8').trim().split(nl)){const i=ligne.indexOf('=');const v=ligne.slice(i+1);console.log(ligne.slice(0,i)+' est définie, '+v.length+' caractères, valeur masquée')}console.log('.env est dans .gitignore : '+(fs.readFileSync('demo-cles/.gitignore','utf8').split(nl).includes('.env')?'oui':'non'))"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
La même idée dans un vrai déploiement
Votre hébergeur a un endroit pour les secrets et les donne à votre programme comme variables d’environnement. Le code reste le même sur votre portable et sur le serveur.
Publiez un fichier .env.example avec les noms et de fausses valeurs. Il dit à un nouveau collègue ce qu’il faut régler.
Exemple travaillé : que faire après une fuite
| Ce qui s’est passé | Que faire |
|---|---|
| La clé est dans le code, pas validée | La déplacer dans une variable d’environnement |
| Elle est validée, pas publiée | Renouveler la clé, puis réécrire le commit |
| Elle est publiée dans un dépôt public | Renouveler la clé tout de suite, puis nettoyer l’historique |
| Elle a été collée dans un message ou une consigne | Renouveler la clé |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une erreur fréquente
Attention
Beaucoup de gens pensent que supprimer la clé dans un nouveau commit l’efface. Git garde tous les anciens commits : la clé reste dans l’historique pour quiconque l’a copiée. Renouvelez la clé, car seule une nouvelle clé rend l’ancienne inutile.