Sommario

    Autenticazione con le REST API di WordPress

    Avere accesso ai dati che sono protetti da password è uno dei primi problemi che si trova ad affrontare uno sviluppatore che decida di approcciarsi ad un uso headless di WordPress.

    L’API REST […] fornisce l’accesso ai dati al contenuto del tuo sito e implementa le stesse restrizioni di autenticazione: il contenuto pubblico sul tuo sito è generalmente accessibile pubblicamente tramite l’API REST, mentre il contenuto privato, il contenuto protetto da password, gli utenti interni, i tipi di post personalizzati, e i metadati sono disponibili solo con l’autenticazione.

    developer.wordpress.org

    L’autenticazione sarà ovviamente necessaria per compiere determinate operazioni quali l’inserimento di un nuovo post o per la visualizzazione di specifici dati reperibili solo nel backend di WordPress. Se, così come abbiamo imparato nell’articolo precedente, provassimo ad esempio a visualizzare i menu di navigazione creati nel pannello di amministrazione riceveremmo chiaramente un errore.

    [code] => rest_cannot_view
    [message] => Non hai i permessi per visualizzare i menu.
    [data] => stdClass Object( [status] => 401 )

    Fortunatamente, tuttavia, la procedura per autenticarsi è piuttosto semplice. Fornirò un breve esempio di codice che sfrutta la libreria cURL di PHP ma, innanzitutto, si deve generare un’application password dal pannello amministrativo.

    Application Password

    A partire dalla versione 5.6, WordPress mette a disposizione le Application Password, che possono essere generate dalla pagina Modifica utente (Utenti > Modifica utente). Le credenziali possono essere passate alle richieste API REST servite su HTTPS utilizzando la Basic Auth / RFC 7617

    developer.wordpress.org

    Le Application Password, o password delle applicazioni, consentono l’autenticazione tramite REST API e non vanno confuse con la password che si utilizza per accedere a WordPress. Sono due concetti con un ambito di utilizzo totalmente distinto.

    La generazione di un’application password richiede che l’installazione di WordPress sia sotto protocollo HTTPS. Se si cercherà di testare questa funzionalità in locale e, come di solito avviene per un server locale, non si dispone di un certificato SSL valido sulla macchina, non si potrà procedere. Per ovviare al problema e abilitare anche in locale l’utilizzo delle password delle applicazioni si può aggiungere la riga seguente al file wp-config.php.

    A questo punto per creare la password si dovrà cliccare su Utenti > Modifica utente e scorrere in basso la pagina.

    Nel campo di testo si sceglierà un nome per distinguere la password dal momento che se ne può creare più d’una (solitamente una per ogni applicazione esterna che ne fa uso), in questo caso ho scelto il nome test. Successivamente cliccare su Aggiungi la nuova password dell’applicazione.

    È bene tenere a mente che non sarà possibile visualizzare la password creata in un secondo momento, pertanto sarà nostra cura salvarla in un luogo sicuro da cui poterla recuperare all’occorrenza. Se si dovesse smarrire si potrà soltanto revocarla e crearla nuovamente (e sostituirla nell’applicazione che ne fa uso).

    Autenticazione con cURL

    Non resta che riportare la password appena creata nella richiesta HTTP alle REST API e il gioco è fatto. Si userà il solito nome utente per accedere al pannello di amministrazione di WordPress (nell’esempio sotto admin) e la password delle applicazioni generata (quindi non la solita che si usa per accedere a WordPress).

    Occorrerà codificare con algoritmo Base64 la stringa composta da nome utente + : + password e inserirla nelle intestazioni HTTP della richiesta.

    Nel caso di specie il codice completo risultante sarà pertanto il seguente.