Cómo: Realizar solicitudes autenticadas con JWT a la API de Wordpress

10

Esto no es realmente una pregunta, sino una guía sobre cómo realizar solicitudes autenticadas a la API de Wordpress mediante JWT. Estoy escribiendo esto como un recordatorio para mí y para aquellos que puedan necesitar ayuda con el mismo tema.

    
pregunta grazianodev 01.04.2018 - 19:30

2 respuestas

11

Por qué autenticación JWT

Estoy creando un sitio que usa Wordpress como back-end, y una aplicación React + Redux como front-end, así que estoy extrayendo todo el contenido del front-end haciendo solicitudes a la API de Wordpress. . Algunas solicitudes (principalmente, solicitudes POST) deben estar autenticadas, 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 WP REST API plugin. Como se explica en las instrucciones del complemento, también necesitamos modificar algunos archivos básicos de Wordpress. En particular:

En el archivo .htaccess incluido en la carpeta raíz de la instalación de Wordpress, debemos 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);

Pruebas para ver si JWT está disponible

Para verificar que ahora podemos usar JWT, inicie Postman y realice una solicitud al 'índice' predeterminado de la API de Wordpress:

http://example.com/wp-json/

Se deberían haber agregado algunos puntos finales nuevos, como /jwt-auth/v1 y /jwt-auth/v1/token a la API. Si puede encontrarlos en la respuesta a la solicitud anterior, significa que JWT ya está disponible.

Obtención del token JWT

Permanezcamos 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

Realizar una solicitud autenticada

Intentemos cambiar el título de una publicación con un ID de 300 como ejemplo de una solicitud autenticada con JWT.

En Postman, 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 procesar 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 pulsar ENVIAR. Busque en la pestaña de respuesta con todos los datos sobre la publicación que solicitamos: el valor de la clave del título ahora debe ser YES! Authenticated requests with JWT work

    
respondido por el grazianodev 27.04.2018 - 08:36
0

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,'http://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: token $ del portador"

Donde $ token es el token devuelto por la función getToken () anterior.

Personalmente uso el complemento " Deshabilitar REST API y Requerir autenticación JWT / OAuth " para restringir el acceso a la API solo con el token anterior.

    
respondido por el Lucas Bustamante 29.07.2018 - 01:17

Lea otras preguntas en las etiquetas