Какие механизмы используются в Django для проверки JWT-токенов

Ответ

Проверка JWT-токенов в Django, особенно при использовании Django REST Framework (DRF), реализуется через классы аутентификации (Authentication Classes). Самым популярным решением является библиотека djangorestframework-simplejwt.

Механизм работает следующим образом:

  1. Настройка аутентификации: Класс аутентификации указывается для конкретного View или глобально в настройках проекта.
  2. Извлечение токена: При каждом запросе класс аутентификации пытается извлечь токен из заголовка Authorization: Bearer <token>.
  3. Валидация: Если токен найден, он декодируется и проверяется его подпись, срок действия (exp) и другие поля.
  4. Аутентификация пользователя: В случае успеха в объект request добавляется request.user, и доступ разрешается.

Пример с djangorestframework-simplejwt:

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework_simplejwt.authentication import JWTAuthentication

class ProtectedDataView(APIView):
    # Указываем, что для этого View нужно использовать JWT-аутентификацию
    authentication_classes = [JWTAuthentication]
    # Требуем, чтобы пользователь был аутентифицирован
    permission_classes = [IsAuthenticated]

    def get(self, request):
        # Благодаря успешной аутентификации, здесь доступен request.user
        return Response({"message": f"Hello, {request.user.username}! This is protected data."}) 

Для применения проверки ко всему проекту, JWTAuthentication добавляется в settings.py:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    )
}