В чем разница между аутентификацией и авторизацией? Мы знаем это, или мы запутались, или думали, что это то же самое. Потому что большую часть времени мы используем эти два слова, когда речь идет о входе в систему или получении доступа к любому сервису.

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

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

Django поставляется с хорошо поддерживаемой системой аутентификации и разрешений. Предусмотрено 2 типа аутентификации:

  1. Аутентификация сеанса - это аутентификация с отслеживанием состояния. Когда пользователь входит в систему, на сервере создается сеанс. Он возвращает клиенту идентификатор сеанса, который хранится в файлах cookie браузера. Чтобы использовать защищенные API-интерфейсы, клиент должен отправить идентификатор сеанса в заголовке.
  2. Аутентификация токена - состояние сохраняется только на стороне клиента. Когда пользователь входит в систему, данные зашифровываются в JWT (веб-токен JSON) с использованием секрета. Токен хранится в локальном хранилище клиента и отправляется в остальных запросах API, требующих аутентификации.

Пользовательская аутентификация в Django REST Framework - это способ настройки типа аутентификации, который вы хотите использовать в своем приложении. Здесь я покажу вам образец типа аутентификации, в котором вы будете предоставлять API-интерфейсы клиенту, которым может быть другое приложение или служба.

В этом блоге вы узнаете, как можно реализовать пользовательскую аутентификацию в Django.

На диаграмме последовательности показан процесс аутентификации, который мы пытаемся реализовать. Это общий процесс, которому следует большинство организаций для доступа к API из других сервисов.

client_id и client_secret передаются клиентскому приложению с помощью https://onetimesecret.com/, клиент сохраняет идентификатор и секреты.

Когда клиент отправляет client_id и client_secret на наш сервер. Ответом на этот вызов является JSON, в котором есть access_token и refresh_token и срок его действия.
Когда клиент обращается к защищенной службе API, ему необходимо передать access_token в заголовке вызова API.

1. Предпосылки

1. Git
2. Docker
3. Python 

2. Действия, которые необходимо выполнить для пользовательской аутентификации в Django Rest Framework

Шаг 1. Клонируйте репозиторий git

git clone https://github.com/anu37/DjangoCustomAuthentication.git

Шаг 2. Выполните следующие команды, чтобы запустить приложение.

$ cd ./sample_rest_api
$ docker build -t sample_rest_api:latest .
$ docker-compose -f docker-compose.yml up -d

Шаг 3. Войдите в панель администратора

Панель администратора - http: // localhost: 8000 / admin /

Имя пользователя - admin
Пароль - admin-password

Шаг 4. Создайте идентификатор клиента и секрет клиента для приложения в модели application

Введите образец application_name и сохраните запись в модели приложения. Обратите внимание на client_id и client_secret.

Открытые API

  1. POST http: // localhost: 8000 / secure / auth / - что дает нам токен доступа, необходимый для использования остальных API-интерфейсов, которые вы создаете в проекте.
  2. POST http: // localhost: 8000 / secure / refreshtoken / - для создания нового токена доступа при необходимости или в случае взлома токенов.
  3. POST http: // localhost: 8000 / api / urlshort / - это API, который аутентифицируется с использованием пользовательской аутентификации, где мы передаем токен доступа, который вы получили из предыдущего API, в заголовке в виде жетон на предъявителя. Это безопасный API, который аутентифицируется с использованием пользовательской аутентификации.

Примечание. Создайте ключ API на веб-сайте RAPID API и добавьте ключ API в файл ./sample_rest_api/urlshorter/views.py (строка №: 46)

Для документации по API обратитесь к пользовательскому интерфейсу Swagger - http: // localhost: 8000 / swagger /

Приложение customauth определяет весь процесс пользовательской аутентификации.

  1. Мы определяем модели, в которых хранятся имя приложения, идентификатор клиента и секрет клиента.
  2. Также модель для хранения токена доступа, токена обновления и истечения срока действия токенов.
  3. Представления определяют логику обработки токенов в приложении.
  4. Exceptions.py - это то, как мы переопределяем исключения по умолчанию в Django.

5. Generators.py показывает, как мы генерируем токены и секреты.

6. Auth.py - это сердце процесса аутентификации, где мы определяем, как токен берется из открытого API и как мы будем проверять его в БД.

7. Наконец, мы определяем класс аутентификации в DEFAULT_AUTHENTICATION_CLASSES словаре REST_FRAMEWORK в файле настроек.

Надеюсь, это поможет вам реализовать настраиваемую аутентификацию. Сделайте безопасное изменение в Django.