Аутентификация JWT
Модуль Drupal API Authentication работает путем отправки JWT-токена вместе с API-запросами для аутентификации. JWT (JSON Web Token) — это открытый стандарт, позволяющий безопасно представлять идентификацию пользователя при взаимодействии двух сторон.
На первом этапе используются имя пользователя и пароль сайта Drupal для получения JWT. После успешной проверки учетных данных модуль создает подписанный токен, который затем возвращается клиентскому приложению.
Получив JWT, вы можете использовать его для выполнения операций в Drupal до истечения срока действия токена. Модуль предоставит доступ только в случае получения действительного JWT от клиента.
JWT может быть подписан и проверен с использованием алгоритмов HSA или RSA.
Рассмотрим пример использования JWT для аутентификации API в Drupal.
Видео-инструкция:
Предварительные требования:
- Скачайте и установите модуль Drupal REST & JSON API Authentication.
- REST UI — модуль с интерфейсом для настройки REST API.
- Активируйте модули:
- REST UI
- RESTful Web Services
- Serialization
Настройка JWT-аутентификации:
- В примере реализуем создание базовой страницы в Drupal через API
/node
.
Включение API и методов:
- Через модуль REST UI откройте «Configure»:
- Включите
/node
API: - Настройки:
- Метод: POST
- Формат: json
- Аутентификация: rest_api_authentication
Настройка JWT:
- Перейдите в /admin/config/people/rest_api_authentication/auth_settings.
- Включите «Enable Authentication», выберите метод JWT.
- Для использования внешнего токена можно указать:
- Имя атрибута, содержащего имя пользователя
- JWKS URI для валидации токена
Назначение прав для ролей:
- Перейдите в /admin/people/permissions и отметьте «Basic page: Create new content» для нужной роли:
Примеры:
- Сначала получим JWT, отправив POST-запрос с base64-кодированными именем пользователя и паролем:
Запрос: POST <ваш_сайт>/rest_api/id_token
Заголовки:
Authorization: Basic base64(<username:password>) Accept: application/json
Curl:
curl -X POST 'https://example.com/rest_api/id_token' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -H 'Authorization: Basic base64(username:password)'
Аутентификация с помощью JWT:
JWT добавляется как Bearer Token в заголовке:
POST /node?_format=json Authorization: Bearer <JWT> Accept: application/json Content-Type: application/json
{ "type": [{"target_id": "page"}], "title": [{"value": "Drupal Rest API Authentication"}], "body": [{"value": "Page created using the JWT Authentication."}] }
Ошибки:
Ошибка | Описание |
---|---|
INVALID_CREDENTIALS | Неверное имя пользователя или пароль |
MISSING_AUTHORIZATION_HEADER | Отсутствует заголовок Authorization |
INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE | Заголовок Authorization должен быть типа Bearer |
TOKEN_EXPIRED | Срок действия токена истек |
USER_INFORMATION_NOT_FOUND | Не удалось получить информацию о пользователе |
INVALID_SIGNATURE | Подпись токена недействительна |
Источник: Drupal Documentation