Problema de autenticación con API REST - rest_cannot_create
Estoy usando la API REST en WordPress. Para la autenticación estoy usando el plugin Basic Authentication (JSON Basic Authentication)
Uso esta petición (tanto desde Postman como desde Node.js):
POST /wp-json/wp/v2/posts HTTP/1.1
Host: **************
Authorization: Basic *********************
Content-Type: application/json
Cache-Control: no-cache
{ "title": "test", "content": "test", "status": "private", "excerpt": "test" }
Cuando pruebo localmente en mi servidor, funciona bien pero en un VPS obtengo el siguiente error:
{
"code": "rest_cannot_create",
"message": "Lo sentimos, no tienes permiso para crear entradas como este usuario",
"data": {
"status": 401
}
}
Sé que las credenciales del usuario son correctas y que el usuario tiene permisos para crear entradas.
Sospecho que la cabecera de autenticación se pierde en algún punto antes de llegar a la API REST. ¿Pero por dónde debería empezar a depurar? ¿Qué registros debería consultar?

Si estás aquí porque ya lo has intentado todo y aún no puedes crear recursos a través de la API REST de WordPress, permíteme compartir lo que funcionó para mí.
Primero que nada, déjame darte un poco de contexto: tengo WordPress instalado en una instancia de AWS usando Bitnami.
Luego instalé WooCommerce y habilité su API para usarla como un sistema de pruebas. Inmediatamente después, intenté crear productos usando Postman, pero cada vez recibía errores como "woocommerce_rest_cannot_create
" ("Lo siento, no tienes permiso para crear recursos.
"). Probé diferentes métodos de autenticación como OAuth
y Basic Auth
, pero ninguno funcionó.
Así que pensé que tal vez debería probar el endpoint de la API de WordPress (en lugar del endpoint de WooCommerce) para ver si podía crear publicaciones o usuarios, pero eso tampoco funcionó. Recibí errores como:
- "
rest_cannot_create
" ("Lo siento, no tienes permiso para crear publicaciones como este usuario.
") - "
rest_cannot_create_user
" ("Lo siento, no tienes permiso para crear nuevos usuarios
")
Esto es lo que funcionó para mí:
- Instala el plugin Basic Auth. Puedes instalarlo clonando el repositorio en
/opt/bitnami/apps/wordpress/htdocs/wp-content/plugins
y luego activarlo desde la página de plugins en el Administrador de WordPress. También puedes descargar el repositorio como un archivo zip e instalarlo desde un archivo en la página de plugins del Administrador de WordPress. - Cambia Postman (o la herramienta que estés usando para enviar tus solicitudes) para que use Basic Auth. Usa las credenciales de un usuario Administrador existente.
- Edita el archivo
.htaccess
ubicado en/opt/bitnami/apps/wordpress/htdocs
(Este archivo está oculto, no te asustes si no lo ves). - Añade una nueva línea debajo de
RewriteEngine On
e insertaRewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
, guarda y cierra el archivo. - Edita
/opt/bitnami/apps/wordpress/conf/httpd-app.conf
y agrega una nueva línea después deRewriteEngine On
. - En la nueva línea inserta:
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
, guarda y cierra el archivo. - Reinicia Apache:
sudo /opt/bitnami/ctlscript.sh restart apache
- (OPCIONAL) Instala Application Passwords By George Stephanis
Luego volví a intentar desde Postman y todo funcionó perfectamente.
Para más detalles, consulta: https://community.bitnami.com/t/setting-up-api-access-to-wordpress-on-aws-ec2-instance/60589/7

Para mí, descubrí que la respuesta era que tenía que crear y usar una Contraseña de Aplicación de WordPress, en lugar de usar la contraseña normal de inicio de sesión. Una contraseña regular no funcionaría a través de la API.
Las Contraseñas de Aplicación se introdujeron en WordPress 5.6, por lo que esto podría ser relativamente nuevo para algunos: https://make.wordpress.org/core/2020/11/05/application-passwords-integration-guide/
