В предыдущей части мы рассмотрели основные концепции и принципы работы OAuth2. В этой статье мы сосредоточимся на том, как настроить сервер аутентификации OAuth2 с использованием Django OAuth Toolkit (DOT).
1. Установка Django OAuth Toolkit
Чтобы реализовать сервер OAuth2, сначала нужно установить Django OAuth Toolkit (DOT). Это можно сделать с помощью простой команды:
pip install django-oauth-toolkit
После завершения установки необходимо добавить oauth2_provider
в INSTALLED_APPS
и выполнить миграцию.
После миграции вы сможете увидеть дополнительные меню DOT на странице администратора Django.
2. Ознакомление с новыми меню в админке
После установки DOT в админке Django добавляется следующие 5 меню:
1) Access tokens
- Управляет выданными токенами доступа.
- Может проверить срок действия каждого токена, связанное клиентское приложение и информацию о пользователе.
- Токен доступа — это ключ, используемый аутентифицированным клиентом для доступа к защищенным ресурсам.
2) Refresh tokens
- Управляет токенами обновления.
- Используется для получения нового токена доступа, когда старый токен доступа истекает.
- Тем самым пользователи могут продолжать работу без повторной аутентификации.
3) Application
- Регистрирует и управляет клиентскими приложениями OAuth2.
- Приложения должны быть зарегистрированы для связи с сервером аутентификации, и предоставляется множество полей настроек.
4) Grant
- Управляет кодами авторизации.
- Код авторизации — это временный ключ, необходимый клиентскому приложению для запроса токена доступа.
5) ID tokens
- Управляет выданными ID токенами.
- ID токены используются при комбинировании OAuth2 и OpenID Connect (OIDC) и содержат информацию об аутентификации пользователя и клиентском приложении.
- Используются, когда клиент получает информацию о пользователе с помощью протокола OpenID Connect.
3. Подробное описание меню Application
Ключевым моментом сервера OAuth2 является регистрация клиентских приложений. В меню Application
можно настроить следующие поля:
1) Name
Имя приложения. Напишите его четко, чтобы администраторы могли легко его идентифицировать.
2) Client ID
Уникальный идентификатор приложения. Используется сервером OAuth2 для идентификации клиента и создается автоматически.
3) Client Secret
Секретный ключ, используемый при аутентификации клиента. Применяется только для серверных приложений (Confidential) и должен храниться в безопасном месте.
4) Client Type
Тип клиентского приложения:
- Confidential: серверное приложение, способное безопасно хранить секретный ключ.
- Public: мобильные приложения или SPA (Single Page Application), которые не могут хранить секретный ключ.
5) Authorization Grant Type
Метод аутентификации, который будет использоваться клиентским приложением. Основные варианты:
- Authorization Code: самый распространенный и безопасный метод.
- Password: прямой ввод идентификатора/пароля пользователя для аутентификации.
- Client Credentials: подходит для коммуникации между серверами.
6) Redirect URIs
URL клиентского приложения, куда будет передан Authorization Code или Access Token после успешной аутентификации.
- Важно: должен точно совпадать с настройками на стороне клиента.
- В случае несоответствия URL сервер OAuth2 не передаст код авторизации или токен.
- Рекомендуется использовать HTTPS для безопасности.
7) Algorithm
Указывает алгоритм, используемый для шифрования токена. Значение по умолчанию — RS256
, представляющее собой алгоритм подписи на основе RSA.
- RS256: использует асимметричное шифрование для проверки подписи с помощью открытого ключа.
- При необходимости можно изменить на другой алгоритм.
8) Skip Authorization
Если установить True
, клиентскому приложению автоматически предоставляется разрешение без одобрения пользователя.
Это полезно для внутренних систем или доверенных приложений.
4. Резюме и следующие шаги
В данной статье мы рассмотрели, как настроить сервер аутентификации OAuth2 с использованием Django OAuth Toolkit (DOT), сосредоточившись на меню администратора и, в частности, на поле Application
. Мы смогли понять процесс регистрации клиентского приложения и роль каждого поля.
В следующей статье мы углубимся в обсуждение Client Type, упомянутого в этом посте. В частности, мы сравним типы Confidential и Public и подробно объясним, как эти два типа используются в OAuth2. Также планируется обсудить следующие вопросы:
- Взаимосвязь между Client Type и PKCE: почему PKCE (Proof Key for Code Exchange) имеет важное значение для публичных клиентов.
- Роль Client Secret: как секретный ключ используется в конфиденциальных клиентах.
- Поток авторизации с использованием кода и PKCE: мы раскроем ключевые моменты самого стандартного типа Grant в OAuth2.
Чтобы четко понять поток авторизации с использованием кода, крайне важно правильно понять взаимосвязь между PKCE и типами клиентов. В следующей статье мы подробно рассмотрим эту тему.

댓글이 없습니다.