Aller au contenu

Authentification

Cette section décrit la classe d’authentification personnalisée utilisée pour valider les requêtes API via une clé API fournie dans l’en-tête HTTP X-API-Key.


Classe ApiKeyAuthentication

Cette classe hérite de BaseAuthentication de Django REST Framework et implémente la méthode authenticate :

  • Récupère la clé API dans l’en-tête X-API-Key de la requête HTTP.
  • Si aucune clé n’est fournie, l’authentification n’est pas tentée.
  • Recherche la clé dans la base de données via le modèle ApiKey.
  • Si la clé n’existe pas ou est invalide (désactivée ou expirée), elle lève une exception AuthenticationFailed.
  • Si la clé est valide, elle retourne un tuple (utilisateur, clé_api) lié à cette clé.

Exemple d’utilisation

from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
from .models import ApiKey

class ApiKeyAuthentication(BaseAuthentication):
def authenticate(self, request):
api_key = request.headers.get('X-API-Key')
if not api_key:
return None
try:
key_obj = ApiKey.objects.get(key=api_key)
except ApiKey.DoesNotExist:
raise AuthenticationFailed('Invalid API key')
if not key_obj.is_valid():
        raise AuthenticationFailed('Expired or deactivated API key')

    return (key_obj.user, key_obj)

Flux d'authentification

  1. Le client inclut la clé API dans l’en-tête HTTP X-API-Key.
  2. Le serveur vérifie la validité de la clé et le statut de l’utilisateur associé.
  3. Une fois authentifié, les requêtes sont soumises aux permissions configurées.

Cette méthode garantit une authentification sécurisée et fine, adaptée aux API REST nécessitant un contrôle d’accès par clé unique.