API RIP WP impostazione e utilizzo dell'autenticazione di base

Nella parte introduttiva di questa serie, abbiamo avuto un rapido aggiornamento sull'architettura REST e su come può aiutarci a creare applicazioni migliori. Abbiamo quindi esplorato la cronologia delle API REST in WordPress e ci siamo presentati all'ultima aggiunta: il plug-in API REST di WP. Abbiamo creato un ambiente di lavoro di base per il test con il plug-in, che comprendeva l'installazione di plugin e un client HTTP per l'invio di richieste o la visualizzazione della risposta del server.

Nella parte attuale della serie, configureremo un protocollo di autenticazione di base sul server per inviare richieste autenticate per eseguire varie attività tramite l'API REST.

Per essere precisi, in questa parte dovremo:

  • guarda i vari metodi di autenticazione disponibili quando usi il plugin API REST
  • configurare l'autenticazione di base sul server
  • invia una richiesta autenticata usando Postman
  • invia una richiesta autenticata utilizzando il framework JavaScript
  • invia una richiesta autenticata usando la riga di comando
  • invia una richiesta autenticata usando l'API HTTP WP

Ma prima diamo un'occhiata all'autenticazione stessa.

Cos'è l'autenticazione?

Nella sua definizione più semplice, l'autenticazione è il processo per determinare l'identità di una persona.

Secondo la Webopedia:

Il processo di identificazione di un individuo, solitamente basato su un nome utente e una password. Nei sistemi di sicurezza, l'autenticazione è distinta dall'autorizzazione, che è il processo che consente agli individui di accedere agli oggetti di sistema in base alla loro identità. L'autenticazione si limita a garantire che l'individuo sia chi afferma di essere, ma non dice nulla sui diritti di accesso dell'individuo.

Quando si parla dell'API REST di WP, un utente con privilegi sufficienti può eseguire varie attività CRUD come la creazione di un post, il recupero di tutti gli utenti del sito o la revoca dei diritti di un utente. Ma per tutte queste azioni è necessario dimostrare la propria identità al server, ed è qui che l'autenticazione fa la sua parte.

Senza un'autenticazione corretta, sarebbe molto facile per qualcuno con ambizioni maliziose fare confusione con il sito, quindi l'autenticazione fornisce uno strato di sicurezza necessario per limitare i diritti di un utente e le azioni che potrebbero essere eseguite.

Autenticazione con l'API REST di WP

L'API WP REST fornisce tre opzioni per l'autenticazione, ciascuna destinata a uno scopo specifico. Queste opzioni sono:

  • autenticazione di base
  • Autenticazione OAuth
  • autenticazione dei cookie

In questo momento, il modo nativo per l'autenticazione con WordPress è l'autenticazione tramite cookie. In questo modo WordPress determina l'identità di un utente e quali azioni può eseguire. Per utilizzare gli altri due metodi di autenticazione sopra elencati con l'API WP REST, è necessario installare i rispettivi plug-in forniti dal team dell'API WP REST disponibile su GitHub. Si spera che questi due metodi saranno inclusi anche nel core di WordPress con il plugin API REST stesso.

L'autenticazione di base è il tipo più basilare 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 un URL che richiede l'autenticazione. Il server richiede al client (o al programma utente) di autenticarsi inviando un 401-Non autorizzato codice. Il client, in cambio, restituisce la stessa richiesta ma con le credenziali di accesso come una stringa codificata in base 64 nel formato username: password. Questa stringa viene inviata nel Autorizzazione campo di intestazione come segue:

Autorizzazione: base base64_encode (username: password)

Quindi se il nome utente è tutsplus e la password è 123456, il seguente campo di intestazione verrebbe inviato con la richiesta:

Autorizzazione: base dHV0c3BsdXM6MTIzNDU2

Poiché la stringa codificata base64 può essere facilmente decodificata, questo metodo è altamente insicuro da utilizzare su una rete aperta. Quindi questo metodo dovrebbe essere utilizzato solo per scopi di debug e di sviluppo quando la connessione tra il server e il client è attendibile.

Installare il plugin

Come menzionato sopra, il plugin è disponibile su GitHub dal team dell'API REST di WP. Quindi tutto ciò che dobbiamo fare è clonarlo nel nostro plugins directory e attivarlo.

Vai al tuo / Wp-content / plugins / directory e clonare il plugin per il quale potrebbe essere necessario sudo i diritti per eseguire il comando. Per fare ciò, emettere il seguente:

$ sudo git clone https://github.com/WP-API/Basic-Auth.git

Il terminale chiederà la tua password. Inserisci la tua password e lascia che il repository sia clonato in una directory.

Dopo aver clonato il plugin, attivalo andando al tuo WP Admin. Il metodo di autenticazione HTTP di base può ora essere utilizzato con il plug-in API REST.

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, così come Postman per Chrome. Per inviare una richiesta autenticata, vai al Autorizzazione scheda sotto la barra degli indirizzi:

Ora seleziona Autentica di base dal menu a discesa. Ti verrà chiesto di inserire nome utente e password. Dopo aver inserito le tue credenziali, fai clic su Richiesta di aggiornamento pulsante.

Dopo aver aggiornato l'opzione di autenticazione, vedrai una modifica nel file intestazioni scheda e ora include un campo di intestazione contenente il nome utente e la stringa codificati:

Questo è tutto su come configuriamo l'autenticazione di base con Postman. Ora puoi inviare una richiesta di prova come eliminare un post, che richiede l'autenticazione:

CANCELLA http: // dev-server / wp-json / wp / v2 / posts / 52

Dove dev-Server è il percorso del tuo server di sviluppo.

Se tutto va bene, il server restituirà a 200 OK codice di stato, che indica che il post con un ID di 52 è stato cancellato:

Non preoccuparti della richiesta che abbiamo fatto qui - lo esamineremo in modo più dettagliato nelle parti future della serie.

Invio di richieste autenticate dalla riga di comando

Possiamo usare la riga di comando per inviare richieste autenticate usando questo metodo. Considera quanto segue arricciare equivalente della richiesta di cui sopra:

curl --request DELETE -I --user admin: password http: // dev-server / wp-json / wp / v2 / posts / 52

La seguente risposta verrebbe inviata dal server, indicando che tutto è a posto:

HTTP / 1.1 200 OK Data: Ven, 28 ago 2015 20:02:43 GMT Server: Apache / 2.4.6 (CentOS) PHP / 5.6.12 X-Powered-By: PHP / 5.6.12 Set-Cookie: PHPSESSID = k0rg6mcbsie7ufvoav219lqre0; path = / Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check = 0, pre-check = 0 Pragma: no-cache X- Opzioni di tipo contenuto: nosniff Link: ; rel = "alternate"; type = text / html Permetti: GET, POST, PUT, PATCH, DELETE Transfer-Encoding: Chunked Content-Type: application / json; charset = UTF-8

Il --richiesta opzione specifica il metodo di richiesta da utilizzare, che nel nostro caso è ELIMINA. Puoi anche usare -X come alternativa al --richiesta opzione.

Il -io l'opzione recupera solo le intestazioni HTTP inviate dal server. L'alternativa a -io è il --capo opzione.

Invio di richieste autenticate tramite JavaScript

Se si utilizza un framework JavaScript lato client, come jQuery, per interagire da remoto con un sito WordPress con l'API WP abilitata, è possibile inviare le intestazioni di autorizzazione in una richiesta AJAX. Considera quanto segue ELIMINA richiesta inviata attraverso il jQuery.ajax () metodo:

$ .ajax (url: 'http: // dev-server / wp-json / wp / v2 / posts / 52', metodo: 'DELETE', crossDomain: true, beforeSend: function (xhr) xhr.setRequestHeader ( 'Autorizzazione', 'Base' + Base64.encode ('username: password'));, success: function (data, txtStatus, xhr) console.log (dati); console.log (xhr.status); );

Dove Base64 è un oggetto utilizzato per codificare e decodificare una stringa base64. È definito come segue, prima di quanto sopra jQuery.ajax () chiamata al metodo:

var Base64 = _ keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + / =", codifica: function (e) var; var n, r, i, s, o, u, a; var f = 0; e = Base64._utf8_encode (e); mentre (f> 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; var n, r, i; var s, o, u, a; var f = 0 ; e = e.replace (/ [^ A-Za-z0-9 \ + \ / \ =] / g, ""); while (f> 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;for(var n=0;n127 && 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 + = Stringa .fromCharCode (r & 63 | 128) return t, _ utf8_decode: function (e) var; var n = 0; var r = c1 = c2 = 0; while (n191 && r<224)c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2elsec2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3return t;

L'ho trovato su StackOverflow, ed è un modo cross-browser per codificare e decodificare una stringa base64 in JavaScript.

Nella richiesta di cui sopra, abbiamo impostato il Autorizzazione intestazione usando il setRequestHeader () metodo del XHR oggetto passato come argomento al beforeSend () metodo.

Oltre alla richiesta di cui sopra, il Access-Control-Allow-intestazioni le intestazioni dovrebbero consentire Autorizzazione campo sul server. Questo può essere abilitato aggiungendo la seguente riga di codice nel file .htaccess di WordPress:

L'intestazione imposta sempre l'intestazione di autorizzazione di Access-Control-Allow-Headers sempre impostata

La richiesta di cui sopra, una volta completata, riprodurrà la risposta nella console del browser come mostrato nella figura seguente:

Il 200 codice di risposta di stato restituito dal server mostra che il post con un id di 52 è stato cancellato con successo.

Invio di richieste autenticate tramite l'API HTTP WP

Se stai interagendo da remoto con un altro sito WordPress dalla tua installazione di WordPress, il modo più appropriato per inviare richieste HTTP è l'API HTTP WP.

Si consideri il seguente codice che invia un ELIMINA richiesta ad un'altra installazione di WordPress con WP REST API e autenticazione di base abilitata:

$ wp_request_headers = array ('Authorization' => 'Basic'. base64_encode ('username: password')); $ wp_request_url = 'http: // localserver / wordpress-api / wp-json / wp / v2 / posts / 52'; $ wp_delete_post_response = wp_remote_request ($ wp_request_url, array ('method' => 'DELETE', 'headers' => $ wp_request_headers)); echo wp_remote_retrieve_response_code ($ wp_delete_post_response). ". wp_remote_retrieve_response_message ($ wp_delete_post_response);

Qui abbiamo usato il wp_remote_request () funzione che accetta due argomenti:

  • $ url: l'URL della richiesta
  • $ args: una serie di argomenti aggiuntivi da passare

Il metodo $ definito nel $ args l'array è ELIMINA, e dovrebbe sempre essere scritto in maiuscolo. Il $ headers array accetta coppie di valori chiave di tutti i campi di intestazione da passare con la richiesta. Abbiamo superato il Autorizzazione chiave con un nome utente e una stringa codificati base64 come valore.

La risposta verrebbe salvata nel $ wp_delete_post_response variabile, che possiamo usare con il wp_remote_retrieve_response_code ()wp_remote_retrieve_response_message () funzioni. Queste due funzioni sono funzioni di supporto nell'API HTTP WP e estraggono rispettivamente il codice di stato e il messaggio di stato dalla risposta.

Se il post viene cancellato con successo dalla richiesta di cui sopra, il testo seguente verrà echeggiato:

200 OK

Tutto ciò riguarda il metodo di autenticazione di base supportato dall'API REST di WP. Utilizzeremo lo stesso metodo di autenticazione nelle nostre parti future per recuperare, creare o modificare i dati a causa della sua semplicità, a meno che non venga menzionato diversamente.

Conclusione

Nella parte attuale della serie, abbiamo esaminato attentamente il metodo di autenticazione HTTP di base supportato dall'API REST di WP. Tuttavia, non dovrebbe essere utilizzato negli ambienti di produzione dal vivo, poiché la stringa codificata in base64 potrebbe essere facilmente decodificata e le tue credenziali potrebbero cadere nelle mani sbagliate.

Dopo aver installato e testato con successo il metodo di autenticazione di base HTTP, siamo pronti a fare un ulteriore passo avanti e impostare un metodo di autenticazione più sofisticato, il metodo OAuth 1.0a. Lo faremo nella prossima parte della serie, quindi rimanete sintonizzati!