Esto no es realmente una pregunta, sino una guía sobre cómo realizar solicitudes autenticadas a la API de Wordpress utilizando JWT. Estoy escribiendo esto como un recordatorio para mí y para aquellos que pueden necesitar ayuda con el mismo tema.
Esto no es realmente una pregunta, sino una guía sobre cómo realizar solicitudes autenticadas a la API de Wordpress utilizando JWT. Estoy escribiendo esto como un recordatorio para mí y para aquellos que pueden necesitar ayuda con el mismo tema.
Respuestas:
Por qué la autenticación JWT
Estoy construyendo un sitio que usa Wordpress como back-end y una aplicación React + Redux como front-end, por lo que estoy sacando todo el contenido en el front-end haciendo solicitudes a la API de Wordpress. Algunas solicitudes (principalmente, solicitudes POST) deben autenticarse, que es cuando me encontré con JWT.
Lo que necesitamos
Para usar la autenticación JWT con Wordpress, primero debemos instalar la autenticación JWT para el complemento API WP REST . Como se explica en las instrucciones del complemento, también debemos modificar algunos archivos principales de Wordpress. En particular:
En el archivo .htaccess incluido en la carpeta raíz de la instalación de Wordpress, necesitamos agregar las siguientes líneas:
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
En el archivo wp-config.php, también incluido en la carpeta raíz de la instalación de Wordpress, necesitamos agregar estas líneas:
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);
Prueba para ver si JWT está disponible
Para verificar que ahora podemos usar JWT, inicie Postman y haga una solicitud al 'índice' predeterminado de la API de Wordpress:
http://example.com/wp-json/
Algunos puntos finales nuevos, como /jwt-auth/v1
y /jwt-auth/v1/token
deberían haberse agregado a la API. Si puede encontrarlos en la respuesta a la solicitud anterior, significa que JWT ahora está disponible.
Obteniendo el token JWT
Quedémonos en Postman por el momento y solicitemos un token a la API de Wordpress:
http://example.com/wp-json/jwt-auth/v1/token
La respuesta contendrá el token JWT, que es una clave cifrada que se parece a esto:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODg4OFwvZm90b3Jvb20tbmV4dCIsImlhdCI6MTUyMjU5NzQ1MiwibmJmIjoxNTIyNTk3NDUyLCJleHAiOjE1MjMyMDIyNTIsImRhdGEiOnsidXNlciI6eyJpZCI6IjEifX19.hxaaT9iowAX1Xf8RUM42OwbP7QgRNxux8eTtKhWvEUM
Hacer una solicitud autenticada
Intentemos cambiar el título de una publicación con una ID de 300 como ejemplo de una solicitud autenticada con JWT.
En Cartero, elija POST como método y escriba el siguiente punto final:
http://example.com/wp-json/wp/v2/posts/300
Elija Sin autenticación en la pestaña Autorización y agregue lo siguiente en la pestaña Encabezados:
'Content-type': 'application/json',
'Authorization': 'Bearer jwtToken' // Replace jwtToken with the actual token (the encrypted key above)
Finalmente, en la pestaña Cuerpo, seleccione las opciones sin formato y JSON (aplicación / json), luego en el editor justo debajo de las opciones, escriba lo siguiente:
{ "title": "YES! Authenticated requests with JWT work" }
Ahora puedes presionar ENVIAR. Mire en la pestaña de respuestas con todos los datos sobre la publicación que solicitamos: el valor de la clave de título ahora debería serYES! Authenticated requests with JWT work
register_rest_route( 'jwt-auth/v1', 'your_custom_endpoint ...
. Cualquier cosa bajo / jwt-auth / necesitará autorización
Complementando la respuesta de @grazianodev, así es como obtienes tu token de autorización usando 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;
}
Después de eso, envíe sus solicitudes con el encabezado: "Autorización: portador $ token"
Donde $ token es el token devuelto por la función getToken () anterior.
Personalmente utilizo el complemento " Desactivar API REST y requerir autenticación JWT / OAuth " para restringir el acceso a la API solo con el token anterior.