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-Keyde 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¶
- Le client inclut la clé API dans l’en-tête HTTP
X-API-Key. - Le serveur vérifie la validité de la clé et le statut de l’utilisateur associé.
- 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.