Ответ
Проверка JWT-токенов в Django, особенно при использовании Django REST Framework (DRF), реализуется через классы аутентификации (Authentication Classes). Самым популярным решением является библиотека djangorestframework-simplejwt
.
Механизм работает следующим образом:
- Настройка аутентификации: Класс аутентификации указывается для конкретного
View
или глобально в настройках проекта. - Извлечение токена: При каждом запросе класс аутентификации пытается извлечь токен из заголовка
Authorization: Bearer <token>
. - Валидация: Если токен найден, он декодируется и проверяется его подпись, срок действия (
exp
) и другие поля. - Аутентификация пользователя: В случае успеха в объект
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',
)
}