Tous les guides
IntermédiaireÀ votre rythmeGuide gratuitSection 42/95

APIs — Authentification et sécurité

Pratiquez les fondations du développement : programmation, web, API, données et usages de l’IA. Des sections et exercices pour construire vos premiers projets.

💡

Contenu gratuit, accessible sans compte. Les outils et modèles évoluent : consultez le dossier actuel pour vérifier leurs versions. Modèles et sources

Section 11.3.3 : APIs — Authentification et sécurité

🎯 Objectif pédagogique

Comprendre les méthodes d'authentification des APIs (clés API, OAuth 2.0, JWT) et les bonnes pratiques de sécurité. Vous serez capable de vous authentifier correctement sur n'importe quelle API et de protéger vos credentials.


Pourquoi l'authentification ?

Sans authentification, n'importe qui pourrait lire, modifier ou supprimer les données de n'importe quel utilisateur. L'authentification répond à deux questions : qui êtes-vous ? (authentication) et avez-vous le droit ? (authorization).

Les 3 méthodes principales

1. Clé API (API Key) — Le plus simple

import requests

# Dans l'URL (déconseillé — visible dans les logs)
response = requests.get("https://api.example.com/data?api_key=sk_live_abc123")

# Dans le header (recommandé)
response = requests.get(
    "https://api.example.com/data",
    headers=\{"X-API-Key": "sk_live_abc123"\}
)
AvantageInconvénient
Simple à utiliserPas de gestion fine des permissions
Pas d'expiration (sauf config)Si volée → accès total
Idéal pour les APIs serveur-à-serveurPas pour les apps client

2. OAuth 2.0 — Le standard pour les utilisateurs

# Le flux OAuth 2.0 simplifié :
# 1. L'app redirige vers le provider (Google, GitHub)
# 2. L'utilisateur se connecte et autorise
# 3. Le provider retourne un "authorization code"
# 4. L'app échange le code contre un "access token"
# 5. L'app utilise le token pour accéder à l'API

# Avec un access token obtenu
response = requests.get(
    "https://api.github.com/user",
    headers=\{"Authorization": "Bearer ghp_xxxxxxxxxxxxxxxxxxxx"\}
)
user = response.json()
print(f"Connecté : \{user['login']\}")

3. JWT (JSON Web Token) — L'identité portable

# Un JWT contient 3 parties séparées par des points :
# header.payload.signature

# header:  \{"alg": "HS256", "typ": "JWT"\}  → algorithme de signature
# payload: \{"user_id": 1, "exp": 1735689600\}  → données + expiration
# signature: HMAC(header + payload, secret)  → preuve d'authenticité

# Utilisation
response = requests.get(
    "https://api.jobtracker.com/applications",
    headers=\{"Authorization": "Bearer eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxfQ.xxx"\}
)

Protéger ses credentials

# ❌ JAMAIS dans le code
api_key = "sk_live_abc123def456"  # Visible dans Git !

# ✅ Variables d'environnement
import os
from dotenv import load_dotenv

load_dotenv()  # Charge .env

api_key = os.getenv("API_KEY")
db_url = os.getenv("DATABASE_URL")
# Fichier .env (JAMAIS commité !)
API_KEY=sk_live_abc123def456
DATABASE_URL=postgresql://user:pass@host:5432/db
OPENAI_API_KEY=sk-...
# .gitignore — ajoutez TOUJOURS
.env
.env.local
.env.production
*.key
*.pem

Le cauchemar du secret commité

En 2024, 12,8 millions de secrets (clés API, mots de passe) ont été détectés dans les repos GitHub publics (GitGuardian). En moyenne, un secret exposé est exploité en moins de 5 minutes. Marc a failli publier sa clé OpenAI — 500€ de requêtes en 2 heures avant de la révoquer.

Rate limiting — Respecter les limites

import requests
import time

def api_call_with_retry(url, headers, max_retries=3):
    """Appel API avec gestion du rate limiting."""
    for attempt in range(max_retries):
        response = requests.get(url, headers=headers)
        
        if response.status_code == 200:
            return response.json()
        
        if response.status_code == 429:  # Too Many Requests
            retry_after = int(response.headers.get('Retry-After', 60))
            print(f"Rate limited. Attente \{retry_after\}s...")
            time.sleep(retry_after)
            continue
        
        response.raise_for_status()
    
    raise Exception(f"Échec après \{max_retries\} tentatives")

🏋️ Exercice pratique (15 minutes)

  1. →Créez un fichier .env avec une clé API fictive
  2. →Écrivez un script qui la charge avec python-dotenv
  3. →Faites un appel API authentifié (utilisez Open Meteo qui ne nécessite pas de clé)
  4. →Ajoutez la gestion du rate limiting
Vérification rapide

Pourquoi ne faut-il JAMAIS mettre une clé API directement dans le code source ?

Vérification rapide

Quelle est la différence entre OAuth 2.0 et une simple clé API ?

Votre progression

Cette progression est déclarative et conservée dans votre navigateur. L’attestation finale ne constitue pas un diplôme ni une évaluation indépendante.

Voir ma progression et mon attestation

Apprendre l’IA, du premier prompt aux agents

15 guides gratuitsQuiz, schémas et ateliersSans compte

Un cas pratique IA dans votre boîte mail

Méthodes, ressources et nouveaux exercices. Gratuit, avec désinscription à tout moment.