Questa non è davvero una domanda, ma una guida su come effettuare richieste autenticate all'API di Wordpress usando JWT. Sto scrivendo questo come promemoria per me stesso e per coloro che potrebbero aver bisogno di aiuto con lo stesso argomento.
Questa non è davvero una domanda, ma una guida su come effettuare richieste autenticate all'API di Wordpress usando JWT. Sto scrivendo questo come promemoria per me stesso e per coloro che potrebbero aver bisogno di aiuto con lo stesso argomento.
Risposte:
Perché l'autenticazione JWT
Sto creando un sito che utilizza Wordpress come back-end e un'app React + Redux come front-end, quindi sto estraendo tutto il contenuto del front-end inviando richieste all'API di Wordpress. Alcune richieste (principalmente, richieste POST) devono essere autenticate, quando ho incontrato JWT.
Ciò che ci serve
Per utilizzare l'autenticazione JWT con Wordpress, è innanzitutto necessario installare il plug-in API REST di autenticazione JWT per WP . Come spiegato nelle istruzioni del plugin, dobbiamo anche modificare alcuni file Wordpress di base. In particolare:
Nel file .htaccess incluso nella cartella principale dell'installazione di Wordpress, è necessario aggiungere le seguenti righe:
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
Nel file wp-config.php, incluso anche nella cartella principale dell'installazione di Wordpress, è necessario aggiungere queste righe:
define('JWT_AUTH_SECRET_KEY', 'your-top-secret-key'); // Replace 'your-top-secret-key' with an actual secret key.
define('JWT_AUTH_CORS_ENABLE', true);
Test per verificare se JWT è disponibile
Per verificare che ora possiamo usare JWT, avvia Postman ed effettua una richiesta all'indice predefinito dell'API di Wordpress:
http://example.com/wp-json/
Alcuni nuovi endpoint, come /jwt-auth/v1
e /jwt-auth/v1/token
avrebbero dovuto essere aggiunti all'API. Se riesci a trovarli nella risposta alla richiesta di cui sopra, significa che JWT è ora disponibile.
Ottenere il token JWT
Rimaniamo in Postman per il momento e richiediamo un token all'API di Wordpress:
http://example.com/wp-json/jwt-auth/v1/token
La risposta conterrà il token JWT, che è una chiave crittografata simile a questa:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODg4OFwvZm90b3Jvb20tbmV4dCIsImlhdCI6MTUyMjU5NzQ1MiwibmJmIjoxNTIyNTk3NDUyLCJleHAiOjE1MjMyMDIyNTIsImRhdGEiOnsidXNlciI6eyJpZCI6IjEifX19.hxaaT9iowAX1Xf8RUM42OwbP7QgRNxux8eTtKhWvEUM
Fare una richiesta autenticata
Proviamo a cambiare il titolo di un post con un ID di 300 come esempio di una richiesta autenticata con JWT.
In Postman, selezionare POST come metodo e digitare il seguente endpoint:
http://example.com/wp-json/wp/v2/posts/300
Scegliere Nessuna autenticazione nella scheda Autorizzazione e aggiungere quanto segue nella scheda Intestazioni:
'Content-type': 'application/json',
'Authorization': 'Bearer jwtToken' // Replace jwtToken with the actual token (the encrypted key above)
Infine, nella scheda Corpo, seleziona le opzioni raw e JSON (application / json), quindi nell'editor proprio sotto le opzioni digita quanto segue:
{ "title": "YES! Authenticated requests with JWT work" }
Ora puoi premere INVIA. Guarda nella scheda risposta con tutti i dati relativi al post che abbiamo richiesto: il valore per la chiave del titolo dovrebbe essere oraYES! Authenticated requests with JWT work
register_rest_route( 'jwt-auth/v1', 'your_custom_endpoint ...
. Qualunque cosa sotto / jwt-auth / avrà bisogno di autorizzazione
Completando la risposta di @ grazianodev, ecco come ottenere il token di autorizzazione utilizzando cURL:
/**
* Generate a JWT token for future API calls to WordPress
*/
private function getToken() {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'https://site.localhost/wp-json/jwt-auth/v1/token');
curl_setopt($ch, CURLOPT_POST, 1);
# Admin credentials here
curl_setopt($ch, CURLOPT_POSTFIELDS, "username=admin&password=Str0ngPass");
// receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
if ($server_output === false) {
die('Error getting JWT token on WordPress for API integration.');
}
$server_output = json_decode($server_output);
if ($server_output === null && json_last_error() !== JSON_ERROR_NONE) {
die('Invalid response getting JWT token on WordPress for API integration.');
}
if (!empty($server_output->token)) {
$this->token = $server_output->token; # Token is here
curl_close ($ch);
return true;
} else {
die('Invalid response getting JWT token on WordPress for API integration.');
}
return false;
}
Successivamente, invia le tue richieste con l'intestazione: "Autorizzazione: Bearer $ token"
Dove $ token è il token restituito dalla funzione getToken () sopra.
Personalmente utilizzo il plug-in " Disabilita API REST e richiedi autenticazione JWT / OAuth " per limitare l'accesso all'API solo con il token sopra.