PRO

Как настроить кастомную аутентификацию (JWT, Token)?

В DRF аутентификация определяет пользователя запроса по переданным учётным данным. Для простого token-based подхода используют TokenAuthentication, а для stateless API часто применяют JWT через стороннюю библиотеку, например djangorestframework-simplejwt.
Подробный ответ

TokenAuthentication

Встроенный TokenAuthentication DRF хранит токен в базе данных. Нужно добавить rest_framework.authtoken в INSTALLED_APPS, применить миграции и подключить класс аутентификации.

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ],
}

Клиент обычно передаёт токен в HTTP-заголовке Authorization: Token <token>.

JWT

JWT обычно реализуют через пакет djangorestframework-simplejwt. После подключения в настройках указывают JWTAuthentication и добавляют endpoints для выдачи и обновления токенов.

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
}
from django.urls import path
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView

urlpatterns = [
    path('api/token/', TokenObtainPairView.as_view()),
    path('api/token/refresh/', TokenRefreshView.as_view()),
]

JWT обычно передают как Authorization: Bearer <access_token>.

Безопасность

Нужно использовать HTTPS, ограничивать срок жизни access token, продумать обновление и отзыв токенов, а также не хранить секреты в коде. Authentication определяет пользователя, а права доступа дополнительно задают через permission classes.

Как ответить на собеседовании

Для простого API можно использовать встроенный TokenAuthentication DRF. Для stateless API чаще настраивают JWT, например через Simple JWT: подключают JWTAuthentication, endpoints выдачи и обновления токенов, а доступ к ресурсам ограничивают permissions.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге