Problema di autenticazione con REST API - rest_cannot_create
Sto utilizzando le REST API in WordPress. Per l'autenticazione uso il plugin Basic Authentication (JSON Basic Authentication)
Utilizzo questa richiesta (sia da Postman che da 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" }
Quando testo localmente sul mio server funziona correttamente, ma su un VPS ottengo il seguente errore:
{
"code": "rest_cannot_create",
"message": "Spiacenti, non hai i permessi per creare articoli come questo utente",
"data": {
"status": 401
}
}
So che le credenziali utente sono corrette e l'utente ha i permessi per creare articoli.
Sospetto che l'header di autenticazione venga perso da qualche parte prima di arrivare alle REST API. Ma da dove dovrei iniziare il debug? Quali log controllare?

Se sei qui perché hai già provato di tutto e ancora non riesci a creare risorse tramite l'API REST di WordPress, lascia che condivida ciò che ha funzionato per me.
Prima di tutto, permettimi di darti un po' di contesto: ho avviato WordPress su un'istanza AWS utilizzando Bitnami.
Poi ho installato WooCommerce e abilitato la sua API per poterci lavorare come sistema sandbox. Subito dopo, ho provato a creare prodotti utilizzando Postman ma ogni volta ottenevo errori come "woocommerce_rest_cannot_create
" ("Spiacenti, non sei autorizzato a creare risorse.
"). Ho provato diversi metodi di autenticazione come OAuth
e Basic Auth
ma nessuno di questi ha funzionato.
Così ho pensato che forse avrei dovuto provare l'endpoint API di WordPress invece (anziché quello di WooCommerce) e vedere se potevo creare post o utenti, ma anche quello non ha funzionato. Ho ricevuto errori come:
- "
rest_cannot_create
" ("Spiacenti, non sei autorizzato a creare post con questo utente.
") - "
rest_cannot_create_user
" ("Spiacenti, non sei autorizzato a creare nuovi utenti
")
Ecco cosa ha funzionato per me:
- Installa il plugin Basic Auth, puoi installarlo clonando il repository in
/opt/bitnami/apps/wordpress/htdocs/wp-content/plugins
e poi attivandolo dalla pagina dei plugin nell'area di amministrazione di WP. Oppure puoi anche scaricare il repository come zip e installarlo da file dalla pagina dei plugin in WP Admin. - Cambia Postman (o qualunque strumento tu stia usando per inviare le richieste) per utilizzare Basic Auth. Utilizza le credenziali di un utente Amministratore esistente.
- Modifica il file
.htaccess
disponibile in/opt/bitnami/apps/wordpress/htdocs
(Questo file è nascosto, non preoccuparti se non riesci a vederlo) - Aggiungi una nuova riga sotto
RewriteEngine On
e inserisciRewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
, salva ed esci - Modifica
/opt/bitnami/apps/wordpress/conf/httpd-app.conf
aggiungendo una nuova riga dopoRewriteEngine On
- Nella nuova riga inserisci:
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
, salva ed esci - Riavvia Apache:
sudo /opt/bitnami/ctlscript.sh restart apache
- (OPZIONALE) Installa Application Passwords di George Stephanis
Poi ho riprovato da Postman e tutto ha funzionato perfettamente.
Per maggiori dettagli controlla: https://community.bitnami.com/t/setting-up-api-access-to-wordpress-on-aws-ec2-instance/60589/7

Nel mio caso, ho scoperto che la soluzione era creare e utilizzare una Password Applicativa di WordPress, invece di usare la normale password di accesso. Una password regolare non funzionava tramite l'API.
Le Password Applicative sono state introdotte in WordPress 5.6, quindi potrebbero essere una novità per alcuni: https://make.wordpress.org/core/2020/11/05/application-passwords-integration-guide/
