Italian (Italiano) translation by Piergiorgio Sansone (you can also view the original English article)
Nella parte introduttiva di questa serie, faremo un breve riassunto sull'archirtettura REST e come può aiutarci a creare applicazioni migliori. Vedremo poi la storia delle API REST in WordPress ed introdurremo l'ultima nata : il plugin WP API REST. Configureremo un ambiente di lavoro di base per i test del plugin, dove installeremo il plugin ed il client HTTP per l'invio delle richieste o la verifica delle risposte dal server.
In questa parte della serie, configureremo sul server un protocollo di autenticazione di base per inviare le richieste di autenticazione per diverse attività tramite l'API REST.
Per essere precisi, in questa parte :
- Guarderemo i vari metodi di autenticazione disponibili quando si utilizza il plugin API REST
- Imposteremo l'autenticazione di base sul server
- Invieremo una richiesta autenticata tramite Postman
- Invieremo una richiesta autenticata tramite il framework JavaScript
- Invieremo una richiesta autenticata utlizzando la linea comando
- Invieremo una richiesta autenticata utilizzando l' API HTTP di WP.
Ma prima diamo un'occhiata all'autenticazione.
Che cos'è l'Autenticazione?
Nella sua definizione più elementare, l'autenticazione è il processo di determinazione dell'identità di una persona.
Secondo Webopedia:
Il processo di identificazione di un individuo, di solito basato su un nome utente e una password. Nei sistemi di sicurezza, l'autenticazione è distinta dalla autorizzazione, che è il processo di dare gli individui accesso agli oggetti di sistema basati sulla loro identità. L'autenticazione assicura semplicemente che l'individuo è colui o lei che sostiene di essere, ma non dice nulla circa i diritti di accesso dell'individuo.
Quando si parla di API REST di WP, un utente con privilegi sufficienti può eseguire diverse attività CRUD come la creazione di un post, recupero di tutti gli utenti del sito o revocare i diritti di un utente. Ma per tutte queste azioni uno deve provare la sua identità al server, dove l'autenticazione gioca la sua parte.
Senza un'autenticazione appropriata, sarebbe molto semplice per chiunque avesse intenzioni maliziose, pasticciare con il sito,quindi l'autenticazione fornisce un livello di sicurezza necessario per limitare i diritti di un utente e le azioni che possono essere eseguite.
Autenticazione con l'API REST di WP
L'API REST di WP offre tre opzioni per l'autenticazione, ognuno inteso per uno scopo specifico. Queste opzioni sono:
- autenticazione di base
- Autenticazione OAuth
- cookie di autenticazione
Adesso, il modello di autenticazione nativa di WordPress è l'autenticazione tramite i cookie. Questo è come WordPress determina l'identità di un utente e quali azioni può compiere. Per utilizzare con l'API REST di WP gli altri due metodi di autenticazione elencati sopra, abbiamo bisogno di installare i loro rispettivi plugin forniti dal team di WP REST API disponibili su GitHub. Speriamo che questi due metodi siano inclusi anche nel nucleo di WordPress con lo stesso plugin API REST.
L'autenticazione di base è il tipo più semplice di autenticazione HTTP, in cui le credenziali di accesso vengono inviate insieme alle intestazioni della richiesta.
Come funziona l'autenticazione di base.
Nell'autenticazione di base, il client richiede URL che richiede l'autenticazione Il server richiede il client (o user agent) per autenticarsi inviando un codice 401-non autorizzato. Il client, in cambio, invia nuovamente la stessa richiesta ma con le credenziali di accesso come stringa nella codifica base64 nel formato username: password
. Questa stringa viene inviata nel campo di intestazione di autorizzazione
come indicato di seguito:
1 |
Authorization: Basic {base64_encode(username:password)} |
Così se il nome utente fosse tutsplus
e la password fosse 123456
, il campo di intestazione seguente avrebbe inviato con la richiesta:
1 |
Authorization: Basic dHV0c3BsdXM6MTIzNDU2 |
Poiché la stringa con codifica base64 può essere facilmente decodificata, questo metodo è altamente insicuro per essere utilizzato su una rete aperta. Quindi questo metodo deve essere utilizzato solo per scopi di debug e sviluppo quando la connessione tra il server e il client è attendibile.
L'installazione del Plugin
Come accennato in precedenza, il plugin è disponibile su GitHub dal team di API REST di WP. Quindi tutto quello che dobbiamo fare è quello di clonarlo nella nostra directory dei plugin
e attivarlo.
Dirigetevi sulla vostra directory /wp-content/plugins/
e clona il plugin per cui potrebbe essere necessario eseguire il comando sudo per acqusire i diritti . A tale scopo, eseguire le operazioni seguenti:
1 |
$ sudo git clone https://github.com/WP-API/Basic-Auth.git |
Il terminale non ti chiederà la password. Inserisci la tua password e lasciare che il repository essere clonato in una directory.
Dopo la clonazione del plugin, attivatelo andando su WP Admin. Metodo di autenticazione di base HTTP ora può essere utilizzato con il plugin API REST.
L'invio di richieste autenticate tramite Postman
La maggior parte dei client HTTP supporta l'invio di una richiesta utilizzando il metodo di autenticazione di base in modo nativo, e così fa Postman per Chrome. Per inviare una richiesta autenticata, vai alla scheda autorizzazione sotto la barra degli indirizzi:



Ora seleziona la funzionalità Basic Auth dal menu a discesa. Vi si chiederà di immettere il nome utente e la password. Dopo aver immesso le credenziali, fare clic sul pulsante di richiesta di aggiornamento.



Dopo l'aggiornamento dell'opzione di autenticazione, si vedrà un cambiamento nella scheda intestazioni, ora include un campo di intestazione contenente la stringa codificata di username e password:



Questo è tutto su come impostare l'autenticazione di base con Postman Ora è possibile inviare una richiesta di test come l'eliminazione di un post, che richiede l'autenticazione:
1 |
DELETE http://dev-server/wp-json/wp/v2/posts/52 |
Dove c'è dev-server
il percorso è del server di sviluppo.
Se tutto è andato bene, il server restituirà un codice stato 200 OK, che indica che è stato eliminato il post con un id di 52
:



Non preoccuparti per la richiesta che abbiamo fatto qui — ne parleremo in modo più dettagliato nelle parti future della serie.
L'invio di richieste autenticate dalla riga di comando
Possiamo usare la riga di comando per inviare le richieste autenticate utilizzando questo metodo. Si consideri il seguente ricciolo
equivalente della richiesta di cui sopra:
1 |
curl --request DELETE -I --user admin:password http://dev-server/wp-json/wp/v2/posts/52 |
La seguente risposta avrebbe inviata dal server, che indica che tutto è OK:
1 |
HTTP/1.1 200 OK |
2 |
Date: Fri, 28 Aug 2015 20:02:43 GMT |
3 |
Server: Apache/2.4.6 (CentOS) PHP/5.6.12 |
4 |
X-Powered-By: PHP/5.6.12 |
5 |
Set-Cookie: PHPSESSID=k0rg6mcbsie7ufvoav219lqre0; path=/ |
6 |
Expires: Thu, 19 Nov 1981 08:52:00 GMT |
7 |
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 |
8 |
Pragma: no-cache |
9 |
X-Content-Type-Options: nosniff |
10 |
Link: <http://localserver/wordpress-api/demo-post-28/>; rel="alternate"; type=text/html |
11 |
Allow: GET, POST, PUT, PATCH, DELETE |
12 |
Transfer-Encoding: chunked |
13 |
Content-Type: application/json; charset=UTF-8 |
L'opzione --richiesta
specifica il metodo di richiesta da utilizzare, che nel nostro caso è DELETE
.s Potreste anche usare -X
come alternativa all'opzione --request
L'opzione -I
prende solo le intestazioni HTTP inviate dal server L'alternativa a - I
è l'opzione --head
.
L'invio di richieste autenticate utilizzando JavaScript
Se utilizzate un framework JavaScript lato client, come ad esempio jQuery, per interagire in remoto con un sito WordPress con la WP API attivata, è possibile inviare le intestazioni di autorizzazione a una richiesta AJAX. Considerate la seguente richiesta di DELETE
inviata attraverso il metodo jQuery.ajax()
.
1 |
$.ajax({ |
2 |
url: 'http://dev-server/wp-json/wp/v2/posts/52', |
3 |
method: 'DELETE', |
4 |
crossDomain: true, |
5 |
beforeSend: function ( xhr ) { |
6 |
xhr.setRequestHeader( 'Authorization', 'Basic ' + Base64.encode( 'username:password' ) ); |
7 |
},
|
8 |
success: function( data, txtStatus, xhr ) { |
9 |
console.log( data ); |
10 |
console.log( xhr.status ); |
11 |
}
|
12 |
});
|
Dove Base64
è un oggetto utilizzato per la codifica e decodifica una stringa base64. È definito come segue, prima la chiamata al metodo sopra citato jQuery.ajax() .
1 |
var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/\r\n/g,"\n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}}; |
L'ho trovato su StackOverflow, ed è un modo trasversale del browser di codifica e decodifica di una stringa base64 in JavaScript.
Nella richiesta sopra citata impostiamo l'intestazione dell'Autorizzazione
utilizzando il metodo setRequestHader()
per l'oggetto passato xhr
come argomento per il metodo beforeSend()
.
Oltre la richiesta di cui sopra, le intestazioni dell' Access-Control-Allow-Headers
dovrebbero consentire l'accesso al campo di autorizzazione
sul server. Questo può essere abilitato aggiungendo la seguente riga di codice nel file. htaccess di WordPress:
1 |
Header always set Access-Control-Allow-Headers Authorization Header always set |
La richiesta di cui sopra, al termine dell'operazione, visualizzerà la risposta nella console del browser come mostrato nella figura sottostante:



Il codice di risposta con stato 200 restituito dal server indica che il post con un id di 52
è stato eliminato con successo.
L'invio di richieste autenticate tramite API HTTP WP
Se si interagisce in remoto con un altro sito WordPress dalla vostra installazione di WordPress, il modo più appropriato per inviare richieste HTTP è l'API HTTP di WP.
Considerate il codice seguente che invia una richiesta di DELETE
ad un'altra installazione di WordPress con WP API REST e attivata l'autenticazione di base:
1 |
$wp_request_headers = array( |
2 |
'Authorization' => 'Basic ' . base64_encode( 'username:password' ) |
3 |
);
|
4 |
|
5 |
$wp_request_url = 'http://localserver/wordpress-api/wp-json/wp/v2/posts/52'; |
6 |
|
7 |
$wp_delete_post_response = wp_remote_request( |
8 |
$wp_request_url, |
9 |
array( |
10 |
'method' => 'DELETE', |
11 |
'headers' => $wp_request_headers |
12 |
)
|
13 |
);
|
14 |
|
15 |
echo wp_remote_retrieve_response_code( $wp_delete_post_response ) . ' ' . wp_remote_retrieve_response_message( $wp_delete_post_response ); |
Qui usiamo la funzione wp_remote_request()
che accetta due argomenti:
-
$url
: l'URL della richiesta -
$args
: una matrice di argomenti aggiuntivi da passare
la variabile $method
definita nella matrice $args
è DELETE
, e dovrebbe essere sempre scritta in stampatello. La matrice di $headers
prende coppie chiave/valore di tutti i campi di intestazione da passare con la richiesta. Abbiamo passato la chiave di autorizzazione
con una stringa di nome utente e la password con codificata base64 come valore.
La risposta potrebbe essere salvata nella variabile $wp_delete_post_response
, che possiamo usare con le funzioni wp_remote_retrieve_response_code()
e wp_remote_retrieve_response_message()
. Queste due funzioni sono funzioni di supporto dell'API HTTP di WP, e ne estraggono rispettivamente il codice di stato e il messaggio di stato dalla risposta.
Se il post è eliminato con successo dalla richiesta di cui sopra, verrà restituito fuori il seguente testo:
1 |
200 OK |
Questo è tutto circa il metodo di autenticazione di base supportato dall'API REST di WP. Useremo lo stesso metodo di autenticazione nelle nostre parti future per il recupero, la creazione o la modifica dei dati grazie alla sua semplicità, a meno che non diversamente indicato.
Conclusione
In questa parte della serie, abbiamo esaminato attentamente il metodo di autenticazione HTTP di base supportato dall'API REST di WP. Tuttavia, non dovrebbe essere usato in ambienti di produzione live perchè la stringa con codificata base64 potrebbe essere decodificata e le credenziali potrebbero cadere nelle mani sbagliate.
Dopo aver correttamente impostato e testato il metodo di autenticazione di base HTTP, siamo pronti a fare un passo ulteriore e impostare un modo più sofisticato di autenticazione — il metodo OAuth 1.0 a. Lo faremo nella parte successiva della serie, quindi rimanete sintonizzati!