В чем разница между аутентификацией и авторизацией? Мы знаем это, или мы запутались, или думали, что это то же самое. Потому что большую часть времени мы используем эти два слова, когда речь идет о входе в систему или получении доступа к любому сервису.
Аутентификация проверяет, является ли пользователь тем, кем они себя называют. Подтверждение своей личности путем проверки имени пользователя и пароля, отправки токена, использования ключа SSH или любого другого пользовательского метода аутентификации.
Авторизация заключается в том, чтобы убедиться, что у вас есть доступ к ресурсам, для которых вы прошли аутентификацию. Проверка ролей и контроля доступа для пользователя.
Django поставляется с хорошо поддерживаемой системой аутентификации и разрешений. Предусмотрено 2 типа аутентификации:
- Аутентификация сеанса - это аутентификация с отслеживанием состояния. Когда пользователь входит в систему, на сервере создается сеанс. Он возвращает клиенту идентификатор сеанса, который хранится в файлах cookie браузера. Чтобы использовать защищенные API-интерфейсы, клиент должен отправить идентификатор сеанса в заголовке.
- Аутентификация токена - состояние сохраняется только на стороне клиента. Когда пользователь входит в систему, данные зашифровываются в 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
- POST http: // localhost: 8000 / secure / auth / - что дает нам токен доступа, необходимый для использования остальных API-интерфейсов, которые вы создаете в проекте.
- POST http: // localhost: 8000 / secure / refreshtoken / - для создания нового токена доступа при необходимости или в случае взлома токенов.
- 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 определяет весь процесс пользовательской аутентификации.
- Мы определяем модели, в которых хранятся имя приложения, идентификатор клиента и секрет клиента.
- Также модель для хранения токена доступа, токена обновления и истечения срока действия токенов.
- Представления определяют логику обработки токенов в приложении.
- Exceptions.py - это то, как мы переопределяем исключения по умолчанию в Django.
5. Generators.py показывает, как мы генерируем токены и секреты.
6. Auth.py - это сердце процесса аутентификации, где мы определяем, как токен берется из открытого API и как мы будем проверять его в БД.
7. Наконец, мы определяем класс аутентификации в DEFAULT_AUTHENTICATION_CLASSES
словаре REST_FRAMEWORK
в файле настроек.
Надеюсь, это поможет вам реализовать настраиваемую аутентификацию. Сделайте безопасное изменение в Django.