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) # 200Clé 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 TOKENouX-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
- Fondamentaux des API REST pour les développeurs d’agents
- Authentification : clés API et OAuth
- Gérer les réponses et les erreurs d’API
- Limitation du débit et logique de nouvelle tentative