Scroll
Аутентификация по API ключу
Аутентификация по API-ключу — один из самых простых способов защиты REST API в Drupal. Сначала вы генерируете API-ключи для всех пользователей, а затем используете их для ограничения доступа к REST API.
Вы можете отправлять имя пользователя Drupal и API-ключ в заголовке Authorization каждого запроса. Модуль Drupal API Authentication будет аутентифицировать запрос на основе имени пользователя и соответствующего API-ключа. Этот модуль совместим с Drupal 7, 8, 9, 10 и 11.
Видео-инструкция по установке:
Предварительные требования: Загрузка и установка
- Скачайте и установите модуль Drupal REST & JSON API Authentication.
- REST UI — модуль предоставляет интерфейс для настройки REST API.
- Активируйте следующие модули в разделе /admin/modules:
- REST UI
- RESTful Web Services
- Serialization
Настройка аутентификации на основе API-ключей в Drupal
- В примере добавим аутентификацию по API-ключу для API создания пользователя
/entity/user
.
Включите API и назначьте методы
- Откройте конфигурацию модуля REST UI:
- Включите API
/entity/user
: - Выберите следующие параметры:
- Метод: POST
- Формат: json
- Провайдер аутентификации: rest_api_authentication
Создайте поле API Key у пользователя
Примечание: можно пропустить этот шаг в бесплатной версии модуля.
- Перейдите на /admin/config/people/accounts/fields и нажмите «Add field»:
- Выберите тип поля Text (Plain) и задайте метку API Key. Имя машины должно быть field_api_key.
- Сохраните настройки:
Настройка аутентификации по API-ключу
- Перейдите в /admin/config/people/rest_api_authentication/auth_settings
- Отметьте «Enable Authentication» и сохраните настройки.
- Выберите метод API Key.
- Введите имя пользователя и нажмите «Generate API key for this user»:
Разрешите роль создавать пользователей
- Назначьте нужной роли разрешение «Administer users» в /admin/people/permissions:
Пример
- POST-запрос:
<ваш_домен>/entity/user?_format=json
- Заголовки:
Authorization: Basic base64(<username:api_key>)
Accept: application/json
Content-Type: application/json - Тело запроса:
{ "name": [{ "value": "Username" }], "mail": [{ "value": "email@example.com" }], "pass": [{ "value": "secure_password" }], "status": [{ "value": "1" }] }
- Формат curl:
curl --location --request POST 'https://example.com/entity/user?_format=json' \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --header 'Authorization: Basic base64encodedUsername:APIKey' \ --data-raw '{ "name": [{"value": "Username"}], "mail": [{"value": "email@example.com"}], "pass": [{"value": "secure_password"}], "status": [{"value": "1"}] }'
- Пример запроса в Postman:
- Пример успешного ответа:
Ошибки и их описания:
Ошибка | Описание |
MISSING_AUTHORIZATION_HEADER | Отсутствует заголовок Authorization. |
INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE | Неверный тип токена в заголовке Authorization. |
USER_DOES_NOT_EXIST | Указанный пользователь не существует. |
INVALID_API_KEY | Указан неверный API-ключ. |
USER_NAME_MISSING | Имя пользователя не найдено в запросе. |
INVALID_AUTHORIZATION_HEADER | Заголовок Authorization невозможно декодировать. |
Источник: Drupal Documentation