Comment: effectuer des requêtes authentifiées par JWT à l'API Wordpress

10

Ce n’est pas vraiment une question, mais un guide sur la manière de faire des requêtes authentifiées à l’API Wordpress en utilisant JWT. J'écris ceci comme un rappel à moi-même et à ceux qui pourraient avoir besoin d'aide avec le même sujet.

    
posée grazianodev 01.04.2018 - 19:30

2 réponses

11

Pourquoi l'authentification JWT

Je construis un site qui utilise Wordpress en tant que back-end et une application React + Redux en tant que front-end. Je tire donc tout le contenu du front-end en adressant une requête à l'API Wordpress. . Certaines requêtes (principalement les requêtes POST) doivent être authentifiées, c’est-à-dire lorsque j’ai rencontré JWT.

Ce dont nous avons besoin

Pour utiliser l’authentification JWT avec Wordpress, nous devons d’abord installer la Authentification JWT pour WP REST API . Comme expliqué dans les instructions du plugin, nous devons également modifier certains fichiers Wordpress principaux. En particulier:

Dans le fichier .htaccess inclus dans le dossier racine de l'installation Wordpress, nous devons ajouter les lignes suivantes:

RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

Dans le fichier wp-config.php, également inclus dans le dossier racine de l'installation Wordpress, nous devons ajouter les lignes suivantes:

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);

Tester pour voir si JWT est disponible

Pour vérifier que nous pouvons maintenant utiliser JWT, lancez Postman et envoyez une demande à l'index par défaut de l'API Wordpress:

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

Quelques nouveaux points de terminaison, tels que /jwt-auth/v1 et /jwt-auth/v1/token auraient dû être ajoutés à l'API. Si vous pouvez les trouver dans la réponse à la demande ci-dessus, cela signifie que JWT est maintenant disponible.

Obtention du jeton JWT

Restons dans Postman pour le moment et demandons un jeton à l'API Wordpress:

http://example.com/wp-json/jwt-auth/v1/token

La réponse contiendra le jeton JWT, qui est une clé chiffrée qui ressemble à ceci:

  

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODg4OFwvZm90b3Jvb20tbmV4dCIsImlhdCI6MTUyMjU5NzQ1MiwibmJmIjoxNTIyNTk3NDUyLCJleHAiOjE1MjMyMDIyNTIsImRhdGEiOnsidXNlciI6eyJpZCI6IjEifX19.hxaaT9iowAX1Xf8RUM42OwbP7QgRNxux8eTtKhWvEUM

Création d'une demande authentifiée

Essayons de changer le titre d'un article avec un ID de 300 comme exemple d'une demande authentifiée avec JWT.

Dans Postman, choisissez POST comme méthode et tapez le point de terminaison suivant:

http://example.com/wp-json/wp/v2/posts/300

Choisissez Aucune autorisation dans l'onglet Autorisation, puis ajoutez ce qui suit dans l'onglet En-têtes:

'Content-type': 'application/json', 
'Authorization': 'Bearer jwtToken' // Replace jwtToken with the actual token (the encrypted key above)

Enfin, dans l'onglet Corps, sélectionnez les options brutes et JSON (application / json), puis dans l'éditeur situé juste en dessous des options, entrez:

{ "title": "YES! Authenticated requests with JWT work" }

Vous pouvez maintenant appuyer sur SEND. Recherchez dans l'onglet de réponse toutes les données relatives au message que nous avons demandé: la valeur de la clé de titre devrait maintenant être YES! Authenticated requests with JWT work

    
réponse donnée grazianodev 27.04.2018 - 08:36
0

Complémentant la réponse de @ grazianodev, voici comment vous obtenez votre jeton d'autorisation à l'aide de 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;
}

Après cela, envoyez vos demandes avec l'en-tête: "Autorisation: Jeton $ porteur"

Où $ token est le jeton renvoyé par la fonction getToken () ci-dessus.

J'utilise personnellement le plug-in " Désactiver l'API REST et exiger l'authentification JWT / OAuth " pour restreindre l'accès à l'API uniquement avec le jeton ci-dessus.

    
réponse donnée Lucas Bustamante 29.07.2018 - 01:17

Lire d'autres questions sur les étiquettes