В предыдущей части мы рассмотрели основные концепции и принципы работы 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 и типами клиентов. В следующей статье мы подробно рассмотрим эту тему.

OAuth 2.0 Authorization Code Grant Flow