Настройка токена доступа/аутентификации на основе OAuth
OAuth (Open Authorization) — это открытый стандарт аутентификации и авторизации на основе токенов, который может быть использован для реализации единого входа (SSO). OAuth позволяет сторонним сервисам, таким как Facebook, получать доступ к определенной информации о пользователе без раскрытия его пароля. OAuth действует как посредник от имени пользователя и предоставляет сервису токен доступа, разрешающий доступ к конкретным данным аккаунта.
Метод аутентификации API в Drupal с использованием OAuth 2.0 позволяет получить защищённый токен доступа. Этот токен используется для аутентификации при обращении к API вашего сайта. Метод OAuth обеспечивает высокий уровень шифрования и безопасности, предотвращая несанкционированный доступ к REST или JSONAPI конечным точкам вашего Drupal-сайта. Модуль совместим с Drupal 7, 8, 9, 10 и 11.
Видео-инструкция:
В OAuth 2.0 участвуют три стороны:
- Пользователь, владеющий данными, к которым осуществляется доступ через API.
- Приложение, желающее получить доступ к данным от имени пользователя.
- API (сервер ресурсов), контролирующее и предоставляющее доступ к данным.
API предоставляет доступ только при получении действительного токена доступа от приложения. Способ получения токена зависит от выбранной схемы OAuth.
Предварительные требования:
- Скачайте и установите модуль Drupal REST & JSON API Authentication.
- Модуль REST UI для настройки REST-интерфейса.
- Активируйте следующие модули:
- JSON: API
- REST UI
- RESTful Web Services
- Serialization
Настройка OAuth/Access Token аутентификации:
- В примере используется API
/user/{user}
для получения информации о пользователе.
Включение API и методов:
- Перейдите в REST UI и нажмите "Configure":
- Активируйте API
/user/{user}
: - Настройте:
- Метод: GET
- Формат: json
- Аутентификация: rest_api_authentication
Настройка OAuth:
- Перейдите в /admin/config/people/rest_api_authentication/auth_settings.
- Включите «Enable Authentication» и выберите «OAuth/Access Token».
- Сгенерируйте Client ID и Client Secret:
Разрешение для просмотра информации о пользователе:
- Перейдите в /admin/people/permissions и включите «View User Information»:
Примеры:
1. Password Grant:
Запрос токена с использованием имени пользователя и пароля:
POST <drupal_base_url>/rest_api/access_token Content-Type: application/x-www-form-urlencoded grant_type=password username=<drupal_username> password=<drupal_password> client_id=<client_id>
curl -X POST '<drupal_base_url>/rest_api/access_token' \ -H 'Accept: application/json' \ -H 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=password' \ --data-urlencode 'username=<username>' \ --data-urlencode 'password=<password>' \ --data-urlencode 'client_id=<client_id>'
2. Client Credentials Grant:
POST <drupal_base_url>/rest_api/access_token Content-Type: application/x-www-form-urlencoded grant_type=client_credentials client_id=<client_id> client_secret=<client_secret> username=<drupal_username>
curl -X POST '<drupal_base_url>/rest_api/access_token' \ -H 'Accept: application/json' \ -H 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=client_credentials' \ --data-urlencode 'client_id=<client_id>' \ --data-urlencode 'client_secret=<client_secret>' \ --data-urlencode 'username=<drupal_username>'
Ошибки:
Ошибка | Описание |
---|---|
INVALID_CREDENTIALS | Неверное имя пользователя или пароль |
INVALID_CLIENT_ID | Неверный Client ID |
INVALID_CLIENT_SECRET | Неверный Client Secret |
MISSING_USERNAME | Имя пользователя не указано в запросе |
Источник: Drupal Documentation