проблема аутентификации с REST API - rest_cannot_create
Я использую REST API в WordPress. Для аутентификации я использую плагин Basic Authentication (JSON Basic Authentication)
Я использую этот запрос (как из Postman, так и из NodeJS):
POST /wp-json/wp/v2/posts HTTP/1.1
Host: **************
Authorization: Basic *********************
Content-Type: application/json
Cache-Control: no-cache
{ "title": "тест", "content": "тест", "status": "private", "excerpt": "тест" }
При тестировании локально на моем сервере всё работает нормально, но на VPS я получаю следующую ошибку:
{
"code": "rest_cannot_create",
"message": "Извините, вам не разрешено создавать записи под этим пользователем",
"data": {
"status": 401
}
}
Я знаю, что учетные данные пользователя верны, и пользователю разрешено создавать записи.
Я подозреваю, что заголовок аутентификации теряется где-то до того, как доходит до REST API. Но с чего начать отладку? Какие логи проверить?

Если вы здесь, потому что уже перепробовали всё и всё равно не можете создавать ресурсы через WordPress REST API, позвольте поделиться тем, что сработало у меня.
Прежде всего, дам немного контекста: я развернул WordPress на инстансе AWS с помощью Bitnami.
Затем установил WooCommerce и включил его API для тестирования в песочнице. Сразу после этого я попытался создавать продукты через Postman, но постоянно получал ошибки типа "woocommerce_rest_cannot_create
" ("Извините, вам не разрешено создавать ресурсы.
"). Я пробовал разные методы аутентификации, такие как OAuth
и Basic Auth
, но ни один не сработал.
Тогда я подумал, что, возможно, стоит попробовать эндпоинты WordPress API (вместо эндпоинтов WooCommerce), чтобы проверить, смогу ли я создавать записи или пользователей, но и это не сработало. Я получал ошибки:
- "
rest_cannot_create
" ("Извините, вам не разрешено создавать записи от имени этого пользователя.
") - "
rest_cannot_create_user
" ("Извините, вам не разрешено создавать новых пользователей.
")
Вот что помогло мне:
- Установите плагин Basic Auth. Вы можете установить его, клонировав репозиторий в
/opt/bitnami/apps/wordpress/htdocs/wp-content/plugins
, а затем активировав его на странице плагинов в админке WordPress. Или скачайте репозиторий как ZIP-архив и установите через загрузку файла на странице плагинов в админке WordPress. - Настройте Postman (или любой другой инструмент, который вы используете для отправки запросов) на использование Basic Auth. Используйте данные существующего пользователя с правами администратора.
- Отредактируйте файл
.htaccess
, расположенный в/opt/bitnami/apps/wordpress/htdocs
(этот файл скрытый, не пугайтесь, если не видите его). - Добавьте новую строку после
RewriteEngine On
и вставьтеRewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
, сохраните и закройте файл. - Отредактируйте
/opt/bitnami/apps/wordpress/conf/httpd-app.conf
, добавьте новую строку послеRewriteEngine On
. - В новой строке вставьте:
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
, сохраните и закройте файл. - Перезапустите Apache:
sudo /opt/bitnami/ctlscript.sh restart apache
- (ОПЦИОНАЛЬНО) Установите Application Passwords от George Stephanis.
После этого я снова попробовал отправить запрос через Postman, и всё заработало идеально.
Подробнее можно посмотреть здесь: https://community.bitnami.com/t/setting-up-api-access-to-wordpress-on-aws-ec2-instance/60589/7

Для меня решением оказалось создание и использование WordPress Application Password вместо обычного пароля для входа. Обычный пароль не работал через API.
Application Passwords были введены в WordPress 5.6, поэтому для некоторых это может быть относительно новым: https://make.wordpress.org/core/2020/11/05/application-passwords-integration-guide/
