Аутентификация REST API с использованием внешнего поставщика удостоверений
Если вы хотите защитить или ограничить доступ к вашим REST API в Drupal с помощью внешнего поставщика удостоверений (Identity Provider), тогда используйте метод аутентификации через внешнего поставщика.
Аутентификация API Drupal с использованием внешнего поставщика удостоверений включает применение токенов, полученных от сторонних провайдеров, таких как Google, Azure AD, Keycloak, Okta, Gitlab и т. д., для безопасного доступа к REST API в Drupal.
В этом методе необходимо настроить модуль, указав конечную точку User Info, предоставленную поставщиком удостоверений, и атрибут имени пользователя, после чего все запросы к Drupal API можно будет аутентифицировать с помощью токена, выданного этим провайдером. Модуль Drupal REST API проверяет полученные данные пользователя относительно учетных записей Drupal. Модуль совместим с Drupal 7, 8, 9, 10 и 11.
Видеоруководство по настройке:
Предварительные требования:
- Установите модуль REST & JSON API Authentication.
- Установите модуль REST UI для настройки REST-интерфейса.
- Включите следующие модули:
- REST UI
- RESTful Web Services
- Serialization
Настройка аутентификации API через внешний провайдер:
- В примере будет использоваться аутентификация внешнего провайдера для API
/entity/user
, предназначенного для создания пользователей.
Включение API и указание допустимых операций:
- Откройте интерфейс REST UI и нажмите Configure:
- Активируйте API
/entity/user
: - Выберите:
- Метод: POST
- Формат: json
- Аутентификация: rest_api_authentication
Конфигурация модуля аутентификации Drupal REST API:
- Перейдите в
/admin/config/people/rest_api_authentication/auth_settings
. - Включите опцию Enable Authentication и сохраните настройки.
- Выберите External Identity Provider как метод аутентификации.
- Укажите:
- User Info Endpoint — URL от вашего поставщика удостоверений для получения информации о пользователе.
- Username Attribute — имя поля, в котором содержится имя пользователя.
Назначение прав для ролей Drupal:
- Перейдите в
/admin/people/permissions
и включите разрешение Administer users для нужной роли:
Пример запроса:
- Выполните POST-запрос к API
/entity/user?_format=json
с токеном, выданным вашим провайдером удостоверений.
POST <ваш_drupal_url>/entity/user?_format=json Headers: Token: <токен от внешнего провайдера> Accept: application/json Content-Type: application/json Body: { "name": [{"value": "username"}], "mail": [{"value": "email@example.com"}], "pass": [{"value": "yourPassword"}], "status": [{"value": "1"}] }
Пример CURL-запроса:
curl -X POST '<ваш_drupal_url>/entity/user?_format=json' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -H 'Token: <токен от внешнего провайдера>' \ -d '{ "name": [{"value": "username"}], "mail": [{"value": "email@example.com"}], "pass": [{"value": "yourPassword"}], "status": [{"value": "1"}] }'
Возможные ошибки:
Ошибка | Описание |
---|---|
INVALID_USER_INFO_ENDPOINT | Указан неверный URL в поле User Info Endpoint. |
INVALID_USERNAME_ATTRIBUTE | Неверное имя поля имени пользователя или ошибка при получении имени. |
INVALID_TOKEN | Передан неверный или отсутствующий токен в заголовке запроса. |
Источник: Drupal Documentation