Django REST Framework — один из самых популярных веб-фреймворков Django, который использовался для создания многих успешных проектов. Он предоставляет простой удобный интерфейс для проектирования API и веб-сервисов JSON, что весьма популярно среди стартапов. При работе с фреймворком REST в Python существует несколько способов реализации модной аутентификации типа JSON Web Token (JWT). Мы обсудим подробности реализации в этой статье для новичков под катом.
JWT — это закодированная строка JSON, которая передается в заголовках для аутентификации запросов. Обычно она получается путем хеширования данных JSON с помощью секретного ключа. Это означает, что серверу не нужно каждый раз запрашивать базу данных, чтобы получить пользователя, связанного с данным токеном.
Когда пользователь успешно входит в систему, используя свои учетные данные, получается JSON Web Token, который сохраняется в локальном хранилище (тот самый JWT). Всякий раз, когда пользователь хочет получить доступ к защищенному URL, маркер отправляется в заголовке запроса. Затем сервер проверяет наличие действительного JWT в заголовке Authorization, и если он найден, пользователю будет разрешен доступ.
Типичный заголовок содержимого выглядит следующим образом:
Authorization: Bearer gdh676hghu
А вот общая символическая схема взаимодействия:
Перечислим не все, но только некоторые преимущества:
Django REST framework (DRF) является открытым исходным кодом, зрелой и хорошо поддерживаемой библиотекой Python/Django, которая нацелена на создание сложных веб-интерфейсов. Это гибкий и полнофункциональный инструментарий с модульной и настраиваемой архитектурой, позволяющий разрабатывать как простые, готовые конечные точки API, так и сложные REST-конструкции.
HTTP Accept.Django REST Framework поставляется с различными классами аутентификации по умолчанию. Базовая аутентификация, сеансовая аутентификация, аутентификация с помощью токенов и другие.
Аутентификация на основе токенов является наиболее предпочтительным методом реализации аутентификации в современных API. В этом механизме сервер генерирует токен для аутентифицированного пользователя, и пользователь должен отправлять токен JWT вместе со всеми HTTP-запросами, чтобы идентифицировать себя.
Установите DRF и Django-rest-framework-jwt с помощью pip:
pip install djangorestframework pip install djangorestframework-jwt pip install django
Для того чтобы использовать JWT, нам необходимо настроить разрешения Django-rest-framework на прием JSON Web Tokens.
В файл settings.py добавьте следующие конфигурации:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
} Теперь добавьте конечную точку JWT API в файл settings.py, как показано ниже:
from django.urls import path, include
from rest_framework_simplejwt import views as jwt_views
urlpatterns = [
path('api/token/',
jwt_views.TokenObtainPairView.as_view(),
name ='token_obtain_pair'),
path('api/token/refresh/',
jwt_views.TokenRefreshView.as_view(),
name ='token_refresh'),
path('', include('app.urls')),
] Указанная выше конечная точка будет использоваться для генерации и обновления токена JWT при каждом вызове API.
Мы будем использовать модуль Django-REST Framework JWT Python, который мы установили в начале этого руководства. Он добавляет поддержку аутентификации JWT для приложений Django Rest Framework.
Давайте определим некоторые параметры конфигурации для наших токенов и способ их генерации в файле settings.py.
import datetime
JWT_AUTH = {
'JWT_VERIFY': True,
'JWT_VERIFY_EXPIRATION': True,
'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=3000),
'JWT_AUTH_HEADER_PREFIX': 'Bearer',
} Перечислим частые варианты ошибок:
jwt. Decode Error (Decode JWT runtime error), если секрет неверен.Bearer, а по умолчанию это JWT.Теперь вы можете использовать полезную нагрузку JWT в своем методе аутентификации. Перейдите в файл views.py и добавьте следующий код:
def authenticate_user(request):
email = request.data['email']
password = request.data['password']
user = User.objects.get(email=email, password=password)
if user:
payload = jwt_payload_handler(user)
token = jwt.encode(payload, settings.SECRET_KEY)
user_details = {}
user_details['name'] = "%s %s" % ( user.first_name, user.last_name)
user_details['token'] = token
user_logged_in.send(sender=user.__class__,request=request, user=user)
return Response(user_details, status=status.HTTP_200_OK) Каждый раз, когда пользователь хочет сделать запрос к API, он должен отправить токен в заголовках auth, чтобы аутентифицировать запрос. Вы можете протестировать конечную точку API с помощью Postman или любого другого инструмента тестирования API.
Вы можете проверить токен JWT с помощью любого из инструментов тестирования API, например Postman. Ниже приведен скриншот использования Postman для вызова JWT API:
Вы можете найти весь исходный код демонстрационного проекта вот здесь, на Github.
Подведем наши итоги, вот главное что мы узнали.
JWT — лучший способ безопасного обмена информацией между front-end и back-end, поскольку они могут быть подписаны, а значит, мы можем быть уверены, что отправители являются теми, за кого себя выдают. Структура JWT позволяет нам проверить, что содержимое не было подделано.
JWT значительно упрощает процесс аутентификации пользователей в интернете, предоставляя более простой способ обмена информацией между сервером и клиентом. У него много преимуществ (часть которых перечислили выше), но в добавку можно добавить еще следующий важный факт: здесь нет никаких обращений к базе данных! Общеизвестно, что для большинства API сетевые вызовы вносят наибольшую задержку. Следовательно, разумно ожидать, что отсутствие сетевых вызовов (отсутствие обращений к базе данных) для проверки сеанса будет весьма полезным.
Django REST Framework — это суперпопулярный RESTful framework для разработки приложений Django. Она предоставляет высокоуровневое представление о том, как разрабатывать RESTful веб-сервисы в Django. Это удобный инструмент/база для быстрой реализации JWT.
На фоне роста спроса на ликвидность в бычьем рынке 2025 года, криптозаймы снова выходят на…
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…