0Pricing
AI Agents · Leçon

Authentification : clés API et OAuth

Tokens porteurs, en-têtes de clés API et flux OAuth2 pour l’accès des agents aux API.

Authentification : clés API et OAuth est une leçon AI Agents gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Agents, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Agents comprend 4 leçons au total.

Pourquoi l'authentification est importante pour les agents

Lorsque votre agent appelle une API externe, le serveur doit savoir qui effectue la requête. L'authentification prouve l'identité ; l'autorisation détermine ce que vous pouvez faire. Sans authentification correcte, chaque requête renvoie 401 Unauthorized et votre agent ne peut rien faire.

Deux méthodes dominent le développement des agents : les clés API et OAuth 2.0.

import requests

# Without auth — will get 401
response = requests.get('https://api.openai.com/v1/models')
print(response.status_code)  # 401 Unauthorized

# With API key in header — works
headers = {'Authorization': 'Bearer sk-proj-abc123'}
response = requests.get(
    'https://api.openai.com/v1/models',
    headers=headers
)
print(response.status_code)  # 200

Clé API dans l'en-tête d'autorisation

La méthode la plus courante consiste à envoyer votre clé API dans l'en-tête Authorization sous la forme d'un jeton Bearer. Le mot « Bearer » indique que la personne qui possède ce jeton est autorisée : le serveur fait confiance au détenteur de la clé.

Cette méthode est utilisée par OpenAI, Anthropic, GitHub et la plupart des API modernes.

import requests
import os

api_key = os.environ['OPENAI_API_KEY']

response = requests.post(
    'https://api.openai.com/v1/chat/completions',
    headers={
        'Authorization': f'Bearer {api_key}',
        'Content-Type': 'application/json'
    },
    json={
        'model': 'gpt-4o-mini',
        'messages': [{'role': 'user', 'content': 'Hello!'}]
    }
)
print(response.json()['choices'][0]['message']['content'])

Clé API dans un en-tête personnalisé (X-API-Key)

Certaines API — en particulier les plus anciennes ou internes — utilisent un en-tête personnalisé tel que X-API-Key à la place de Authorization: Bearer. Le principe est le même, seul le nom de l'en-tête change. Consultez toujours la documentation de l'API pour connaître le nom exact de l'en-tête attendu.

import requests
import os

api_key = os.environ['SERVICE_API_KEY']

response = requests.get(
    'https://api.someservice.com/v1/data',
    headers={
        'X-API-Key': api_key,
        'Accept': 'application/json'
    }
)

if response.status_code == 200:
    data = response.json()
    print('Got data:', data)
elif response.status_code == 401:
    print('Invalid API key — check X-API-Key header')

Stocker les identifiants dans des variables d'environnement

Ne codez jamais les clés API en dur dans votre code source. Si vous envoyez une clé dans un dépôt public, des robots la trouveront et l'utiliseront de manière abusive en quelques secondes. La bonne méthode consiste à stocker les identifiants dans des variables d'environnement et à les lire au moment de l'exécution avec os.environ.

Utilisez os.environ.get() et affichez un message d'erreur clair si la clé est absente.

import os

os.environ['OPENAI_API_KEY'] = 'sk-proj-abc123xyz789'  # simulate a set env var

api_key = os.environ.get('OPENAI_API_KEY')
if not api_key:
    raise EnvironmentError(
        'OPENAI_API_KEY environment variable not set. '
        'Run: export OPENAI_API_KEY=your-key-here'
    )

print('API key loaded from environment (never hard-code it in source)')

Utiliser python-dotenv pour le développement local

Pendant le développement, conservez vos clés dans un fichier .env à la racine de votre projet. Utilisez la bibliothèque python-dotenv pour les charger automatiquement. Ajoutez .env à votre .gitignore afin qu'il ne soit jamais envoyé dans le dépôt.

# .env file (never commit this!)
# OPENAI_API_KEY=sk-proj-abc123
# ANTHROPIC_API_KEY=sk-ant-xyz456
# GITHUB_TOKEN=ghp_abc789

# In your Python code:
from dotenv import load_dotenv
import os

load_dotenv()  # loads .env into os.environ

openai_key = os.environ['OPENAI_API_KEY']
anthropic_key = os.environ['ANTHROPIC_API_KEY']
github_token = os.environ['GITHUB_TOKEN']

print('Keys loaded successfully')

Qu'est-ce qu'OAuth 2.0 ?

OAuth 2.0 est une norme d'autorisation déléguée. Au lieu de donner le mot de passe d'un utilisateur à votre agent, OAuth permet à l'utilisateur d'autoriser votre agent à agir en son nom, avec une portée et une durée limitées. Cette norme est utilisée par Google, GitHub, Slack et Salesforce.

Le concept essentiel est le suivant : votre agent reçoit un jeton d'accès après un flux d'autorisation, puis utilise ce jeton pour ses appels d'API.

# OAuth flow overview:
#
# 1. Agent redirects user to:
#    https://auth.provider.com/oauth/authorize
#      ?client_id=YOUR_CLIENT_ID
#      &redirect_uri=http://localhost:8080/callback
#      &scope=read:repo%20write:issues
#      &response_type=code
#
# 2. User logs in and grants permission
# 3. Provider redirects to your callback with ?code=AUTH_CODE
# 4. Agent exchanges code for access_token
# 5. Agent uses access_token for API calls

print('OAuth flow: authorize -> code -> token -> API calls')

Flux des identifiants client OAuth2

Le flux des identifiants client est le flux OAuth le plus simple pour les agents : aucune interaction utilisateur n’est nécessaire. Votre agent s’authentifie avec son propre ID client et son secret pour obtenir un jeton. Il est utilisé pour les communications de machine à machine (M2M).

Vous envoyez vos identifiants au point de terminaison des jetons avec POST et recevez un jeton d’accès à courte durée de vie.

import requests
import os

client_id = os.environ['OAUTH_CLIENT_ID']
client_secret = os.environ['OAUTH_CLIENT_SECRET']
token_url = 'https://auth.example.com/oauth/token'

# Request an access token
response = requests.post(token_url, data={
    'grant_type': 'client_credentials',
    'client_id': client_id,
    'client_secret': client_secret,
    'scope': 'read:data write:tasks'
})

token_data = response.json()
access_token = token_data['access_token']
expires_in = token_data['expires_in']  # seconds
print(f'Token valid for {expires_in}s')

Utiliser des jetons OAuth dans les appels d’API

Une fois que vous disposez d’un jeton d’accès OAuth, utilisez-le exactement comme une clé d’API, dans l’en-tête Authorization: Bearer. La différence est que les jetons OAuth expirent, donc votre agent doit gérer le renouvellement du jeton avant d’effectuer des appels.

import requests
import os
import time

class OAuthClient:
    def __init__(self, client_id, client_secret, token_url):
        self.client_id = client_id
        self.client_secret = client_secret
        self.token_url = token_url
        self.access_token = None
        self.token_expiry = 0

    def get_token(self):
        if time.time() < self.token_expiry - 60:  # 60s buffer
            return self.access_token
        r = requests.post(self.token_url, data={
            'grant_type': 'client_credentials',
            'client_id': self.client_id,
            'client_secret': self.client_secret
        })
        data = r.json()
        self.access_token = data['access_token']
        self.token_expiry = time.time() + data['expires_in']
        return self.access_token

    def get(self, url):
        token = self.get_token()
        return requests.get(url, headers={'Authorization': f'Bearer {token}'})

OAuth 2.0 avec la bibliothèque google-auth

Pour les API Google, la bibliothèque google-auth gère toute la complexité d’OAuth à votre place. Elle s’occupe automatiquement du renouvellement des jetons, lit les identifiants depuis un fichier JSON et joint les jetons aux requêtes via une AuthorizedSession.

from google.oauth2 import service_account
from google.auth.transport.requests import AuthorizedSession

# Load service account credentials from JSON file
credentials = service_account.Credentials.from_service_account_file(
    'service-account.json',
    scopes=[
        'https://www.googleapis.com/auth/gmail.readonly',
        'https://www.googleapis.com/auth/calendar.events'
    ]
)

# AuthorizedSession auto-refreshes tokens
session = AuthorizedSession(credentials)

response = session.get(
    'https://www.googleapis.com/gmail/v1/users/me/messages'
)
print(response.json())

Bonnes pratiques de sécurité des clés d’API

La protection des clés d’API est essentielle à la sécurité des agents. Suivez ces règles :

  • Stockez les clés dans des variables d’environnement ou un gestionnaire de secrets (AWS Secrets Manager, HashiCorp Vault)
  • Ne consignez jamais les clés — masquez-les dans la sortie
  • Renouvelez régulièrement les clés et révoquez immédiatement celles qui ont été compromises
  • Appliquez le principe du moindre privilège — ne demandez que les portées nécessaires à votre agent
  • Configurez des listes d’autorisation d’IP sur les clés d’API lorsque le fournisseur le permet
import os

os.environ['OPENAI_API_KEY'] = 'sk-proj-abc123xyz789'

def get_key(env_var):
    key = os.environ.get(env_var)
    if not key:
        raise EnvironmentError(f'Missing required env var: {env_var}')
    return key

def mask_key(key):
    if len(key) < 8:
        return '***'
    return key[:4] + '...' + key[-4:]

api_key = get_key('OPENAI_API_KEY')
print(f'Using key: {mask_key(api_key)}')

Gérer l’erreur 401 Non autorisé dans votre agent

Lorsqu’un agent reçoit une réponse 401 Unauthorized, il ne doit jamais réessayer aveuglément — cela gaspille son quota de limitation de débit. Vérifiez plutôt si le jeton a expiré (essayez de le renouveler) ou si la clé elle-même n’est pas valide (alertez immédiatement une personne afin qu’elle puisse corriger le problème).

import requests
import os

def call_api_with_auth_check(url, api_key):
    response = requests.get(
        url,
        headers={'Authorization': f'Bearer {api_key}'}
    )
    if response.status_code == 401:
        error = response.json().get('error', {})
        code = error.get('code', 'unknown')
        if code == 'token_expired':
            print('Token expired — refresh needed')
            # trigger token refresh flow
        else:
            raise PermissionError(
                f'API key rejected: {error.get("message", "401 Unauthorized")}'
            )
    response.raise_for_status()
    return response.json()

Vérification rapide : stockage des clés d’API

Testez votre compréhension de la gestion des identifiants.

Récapitulatif de l’authentification

Vous avez appris les principaux modèles d’authentification pour les agents :

  • Clés d’API — transmises dans l’en-tête Authorization: Bearer TOKEN ou X-API-Key ; simples et sans état
  • OAuth 2.0 — flux des identifiants client pour M2M ; les jetons expirent et doivent être renouvelés
  • Stockez toujours les clés dans des variables d’environnement, jamais dans le code source
  • Utilisez python-dotenv localement ; en production, utilisez des variables d’environnement ou des gestionnaires de secrets
  • Gérez les réponses 401 en vérifiant si le jeton a expiré ou si la clé n’est pas valide

Une gestion solide de l’authentification est le fondement de tout agent fiable.

Questions Fréquemment Posées

La leçon « Authentification : clés API et OAuth » est-elle gratuite ?

Oui — le texte complet de « Authentification : clés API et OAuth » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Agents, passe à CoddyKit PRO. Le cours AI Agents comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Authentification : clés API et OAuth » ?

Tokens porteurs, en-têtes de clés API et flux OAuth2 pour l’accès des agents aux API. Tu pratiques AI Agents avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer AI Agents ?

Aucune expérience préalable n'est requise. AI Agents sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Authentification : clés API et OAuth » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon AI Agents ?

Oui. Chaque leçon AI Agents inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Fondamentaux des API REST pour les développeurs d’agents
  2. Authentification : clés API et OAuth
  3. Gérer les réponses et les erreurs d’API
  4. Limitation du débit et logique de nouvelle tentative
← Retour à AI Agents