Рубрики
Без рубрики

Django для APIT Notes – Часть III

Django для APIS является руководством на основе проекта для создания современных API с Django & Django Read Framew … Помечено Django, Python, WebDev, DjangorestFramework.

Django для APIS – это руководство по проекту для создания современных API с Django & Django Restard Framework. Подходит для начинающих, которые никогда не создавали API раньше, а также профессиональных программистов, которые ищут быстрое вступление в основы Django и лучшие практики.

Это важные замечания и кодовые фрагменты из книги, которая помогает в расширении любого существующего веб-сайта Django в веб-API с минимальными усилиями, покрывающими все с нуля и документации API. Мы будем обсуждать различные типы методов аутентификации пользователя в части III.

Давайте начнем!

Читать часть I и часть II

  • Авторизация: Permissions API
  • Аутентификация: Процесс, с помощью которого пользователь может зарегистрироваться для новой учетной записи, войти в систему с ним и выйти из системы

Основная аутентификация:

Наиболее распространенная форма аутентификации HTTP известна как «базовая» аутентификация. Когда клиент делает HTTP-запрос, он вынужден отправлять утвержденные учетные данные аутентификации до предоставления доступа.

Полный поток запроса/ответа выглядит следующим образом:

  1. Клиент делает HTTP-запрос
  2. Сервер отвечает на HTTP-ответ, содержащий A 401 (неавторизован) код состояния и Www-аутентифицировать HTTP заголовок с деталями о том, как авторизоваться
  3. Клиент отправляет учетные данные обратно через Авторизация HTTP Header
  4. Сервер проверяет учетные данные и отвечает либо 200 ОК или 403 Запрещено код состояния. После утверждения клиент отправляет все будущие запросы с учетными данными HTTP авторизации.

Примечание: Отправленные учетные данные авторизации являются незашифрованная база64 закодирована Версия <Имя пользователя>: <пароль> Отказ

Минусы:

  • В каждом запросе сервер должен выглядеть вверх и проверять имя пользователя и пароль, что неэффективно.
  • Учетные данные пользователя передаются в четкий текст – не зашифрованы вообще, могут быть легко захвачены и повторно использованы.

Примечание: Основная аутентификация должна использоваться только через HTTPS, безопасную версию HTTP.

Аутентификация сеанса:

На высоком уровне клиент аутентифицируется со своими учетными данными (имя пользователя/пароль), а затем получает Идентификатор сеанса с сервера, который хранится как _Cookie). Этот идентификатор сеанса затем передан в заголовке каждого будущего HTTP-запроса. Когда идентификатор сеанса пропускается, сервер использует его для поиска объекта сеанса, содержащего всю доступную информацию для данного пользователя, включая учетные данные. Этот подход – господство Поскольку запись должна храниться и поддерживаться как на сервере (объект сеанса), так и клиент (ID сеанса).

Давайте рассмотрим базовый поток:

  1. Пользователь вводит свои учетные данные для входа (обычно имена пользователя/пароль)
  2. Сервер проверяет учетные данные правильными и генерируют объект сеанса, который затем сохраняется в базе данных
  3. Сервер отправляет клиента сеанс ID – не сам объект сеанса – который хранится как файл cookie в браузере
  4. Во всех будущих запросах идентификатор сеанса включен в качестве заголовка HTTP и, если подтвержден базой данных, запрос продолжается
  5. Как только пользователь выходит из-за приложения, Идентификатор сеанса разрушен как клиентом, так и сервером
  6. Если пользователь позже вступает в систему снова, новый идентификатор сеанса генерируется и сохраняется в виде файла cookie на клиенте

Примечание: Настройка по умолчанию в Django Rest Framework – это сочетание основной аутентификации аутентификации и сеанса. Используется традиционная система аутентификации на основе сеанса Django и идентификатор сеанса передается в заголовке HTTP по каждому запросу через базовую аутентификацию.

Плюсы:

  • Учетные данные пользователя отправляются только один раз, не в каждом цикле запроса/ответа, что и в базовой аутентификации.
  • Он также более эффективен, так как сервер не должен проверять учетные данные пользователя каждый раз, он просто соответствует идентификатору сеанса к объекту сеанса, который быстро выглядит.

Минусы:

  • Идентификатор сеанса действителен только в браузере, где был выполнен вход; Это не будет работать через несколько доменов. Это очевидная проблема, когда API должен поддерживать несколько фронт-концов, таких как веб-сайт и мобильное приложение.
  • Объект сеанса должен быть в курсе, который может быть сложным в больших участках с несколькими серверами.
  • Печенье отправляется на каждый единственный запрос, даже те, которые не требуют аутентификации, что неэффективно.

Примечание: Как правило, не рекомендуется использовать схему аутентификации на основе сеанса для любого API, которая будет иметь несколько фронтальных концов.

Аутентификация токена

Аутентификация на основе токена – бездействие : Как только клиент отправляет начальные учетные данные пользователя на сервер, создается уникальный токен, а затем хранится клиентом как файл cookie или в локальном хранилище. Затем этот токен передан в заголовок каждого входящего HTTP-запроса, и сервер использует его, чтобы убедиться, что пользователь аутентифицирован.

Сам сервер не сохраняет запись пользователя, просто, действителен ли токен или нет.

Cookies vs localstorage.

- Cookies are used for reading server-side information. 
They are smaller (4KB) in size and automatically sent with each HTTP request. 

- LocalStorage is designed for client-side information. 
It is much larger (5120KB) and its contents are not sent by default with each HTTP request.

Tokens stored in both cookies and localStorage are vulnerable to XSS attacks. 
The current best practice is to store tokens in a cookie with the httpOnly and Secure cookie flags.

Примечание: HTTP Header Www-аутентифицировать Определяет использование токена, который используется в запросе заголовка авторизации ответа.

Плюсы:

  • Поскольку токены хранятся на клиенте, масштабирование серверов для поддержания современных объектов сеанса больше не является проблемой.
  • Токены могут быть общими среди нескольких передних конечностей: тот же токен может представлять пользователя на веб-сайте и тот же пользователь в мобильном приложении.

Минусы:

  • Токен содержит всю информацию о пользователе, а не только идентификатор, так как с установленным объектом сеанса/объекта сеанса. Поскольку токен отправляется по каждому запросу, управление его размером может стать проблемой производительности.

Встроенный токенатница Django Ress Framework:

  • Это не поддерживает настройки токенов, чтобы истечь
  • Это только генерирует один токен на пользователя

JSON WEB TOKENS (JWTS):

JSON WEB TOKENS (JWTS) являются новой, повышенной версией токенов, которые могут быть добавлены в Django Rest Framework через несколько сторонних пакетов.

  • У Jwts есть несколько преимуществ, включая способность генерировать Уникальные токены клиента и Истечение токена Отказ
  • Они могут быть сгенерированы на сервере или с сторонней службой, такими как AUTH0.
  • И jwts может быть зашифрован что делает их безопаснее Чтобы отправить необеспеченные HTTP-соединения.

Аутентификация по умолчанию в DRF

  • Default_permission_classes: Пособие
  • Default_authenticate_classes: СУССУССУТЕНТАЦИЯ И БОЛЬЗОВАННЫЕ ОБРАЗОВАНИЯ.
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': [  # new
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication'
    ],
}

Зачем использовать оба метода?

  • Сеансы используются для питания API ROWSBARY и возможность войти и выходить из него.
  • BasicAuthentication используется для передачи идентификатора сеанса в заголовках HTTP для самого API.

Реализация аутентификации токена

Первый шаг – обновить наши Default_authenticate_classes Настройка для использования Токенауэнтикация следующее:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',  # new
    ],
}

  • Мы сохраняем SessionAuthentication, так как мы все еще нуждаемся в наших API для просмотра, но теперь используйте токены, чтобы пройти учетные данные аутентификации взад и вперед в наших заголовках HTTP.
  • Нам также нужно добавить AuthToken Приложение, которое генерирует токены на сервере. Он поставляется в комплекте Django Read Framework, но должен быть добавлен к нашему Установлено_- Приложения параметр.
'rest_framework.authtoken',

Django-red-auth

Для создания конечных точек API, чтобы пользователь мог входить в систему, выйти из системы и сбросить пароль.

  • Установите . django-red-auth упаковка
pip install django-rest-auth
  • Добавьте новое приложение к Stall_apps config in mattions.py.
'rest_auth',
  • Установите маршруты в URLS.PY
path('api/v1/rest-auth/', include('rest_auth.urls')), 

Регистрация пользователя

Традиционное Django не отправляется со встроенными видами или URL для регистрации пользователей, и не содержит Django Read Framework.

Популярный подход – использовать сторонний пакет Django-Allauth который поставляется с регистрацией пользователя, а также ряд дополнительных функций в систему Auth auth Django, таких как социальная аутентификация через Facebook, Google, Twitter и т. Д.

  • Установите . Django-Allauth упаковка
pip install django-allauth
  • Обновите Stall_apps настройки
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
'rest_auth.registration',
  • Убедитесь, что также включают Email_backend и Site_ID. .

Примечание: Технически это не имеет значения, где в файле settings.py они размещаются, но обычно добавляют дополнительные конфиги, такие как внизу.

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' # new
SITE_ID = 1 # new

Примечание:

  • Конфигурация Email Back-End необходима по умолчанию по умолчанию, электронная почта будет отправлена, когда новый пользователь зарегистрирован, прося их подтвердить свой аккаунт. Вместо того, чтобы также настроить сервер электронной почты, мы выводим электронные письма на консоль с консолью. Emailbackend параметр.

  • Site_id является частью встроенного Django ” сайтов ” Framework, которая представляет собой способ размещения нескольких веб-сайтов из того же проекта Django. Мы, очевидно, есть только один сайт, на котором мы работаем здесь, но Django-Allauth использует структуру сайтов, поэтому мы должны указать настройка по умолчанию.

  • Добавить URL маршрут для регистрации
path('api/v1/rest-auth/registration/', include('rest_auth.registration.urls')),

Читать часть IV здесь

Найдите больше об этом на Github Отказ

Если вам понравилось прочитать эти заметки, то дайте мне знать ваши взгляды в комментариях. Если вы хотите подключиться со мной, следуйте ссылкам ниже:

LinkedIn |. Github |. Twitter |. Переполнение стека

Оригинал: “https://dev.to/pragativerma18/django-for-apis-notes-part-iii-1bo1”