Аутентификация 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