Problema de autenticación con API REST - rest_cannot_create

13 may 2018, 21:08:09
Vistas: 27K
Votos: 5

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?

0
Todas las respuestas a la pregunta 3
1

El encabezado Authorization normalmente es eliminado por Apache.

Puedes solucionarlo con .htaccess

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
9 ago 2018 03:18:59
Comentarios

Este fue difícil de encontrar. ¡Gracias!

Álvaro Franz Álvaro Franz
11 nov 2024 23:40:53
3

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 inserta RewriteRule .* - [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 de RewriteEngine 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

6 ago 2019 05:18:05
Comentarios

compañero, acabas de salvarme dos días

Codecraker Codecraker
23 jun 2020 23:16:27

Me alegra escuchar eso @Codecraker :-)

Antony Fuentes Antony Fuentes
25 jun 2020 00:11:37

Seguí todos los pasos anteriores pero sin suerte :-(

Sohail Ahmed Sohail Ahmed
28 sept 2020 14:13:49
0

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/

21 abr 2023 16:54:55