Comment configurer et utiliser l'API REST WordPress : authentification de base
Publié: 2020-02-26
Dans les versements précédents de cette série, j'ai couvert l'introduction de l'API REST WordPress et de Fetch Posts dans l'API REST WordPress.
Dans cet épisode de la série sur l'API REST WordPress, je vais expliquer comment configurer le ou les protocoles d'authentification de base sur le serveur afin que l'API REST puisse être configurée et maintenir une communication sécurisée avec diverses entités et canaux.
- Qu'est-ce que l'authentification ?
- Authentification avec l'API REST WordPress
- Authentification de base
- Comment fonctionne l'authentification de base ?
- Installer le plugin WordPress REST API
- Envoyer des demandes authentifiées à l'aide de Postman
- Envoyer des demandes authentifiées à l'aide de JavaScript
- Envoyer des demandes authentifiées à l'aide de l'API HTTP WordPress
- Authentification des cookies
Cependant, je commencerai ce tutoriel par une discussion théorique sur la définition de l'authentification.
Qu'est-ce que l'authentification ?
Dans le contexte des technologies de l'information et des communications (TIC), l'authentification est l'idée et le processus de vérification des informations d'identification de la personne ou de l'entité qui demande l'accès à un système particulier.
Il est important de comprendre que l'authentification est différente de l'autorisation. Lorsqu'une personne est authentifiée sur un serveur d'hébergement Web WordPress particulier, elle bénéficie d'un accès de niveau général au système. En revanche, lorsqu'une personne est autorisée, elle peut accéder et utiliser des ressources partielles ou complètes du système. En d'autres termes, l'authentification confirme l'identité tandis que l'autorisation identifie et accorde l'accès aux ressources du système.
Dans le contexte particulier de l'API REST WordPress, un utilisateur authentifié peut effectuer des tâches CRUD. Cependant, l'utilisateur doit prouver ses privilèges d'authentification à chaque étape.
Authentification avec l'API REST WordPress
L'API WordPress REST propose plusieurs options d'authentification, chacune destinée à un usage spécifique.
- Authentification de base
- Authentification OAuth
- Authentification des cookies
À l'heure actuelle, la méthode d'authentification native de WordPress pour les utilisateurs et leurs activités est la vérification par les cookies.
Pour utiliser l'authentification OAuth et l'authentification de base avec l'API REST WordPress, vous devez installer les plugins particuliers disponibles sur le groupe API REST GitHub WordPress. J'espère que ces deux méthodes bénéficieront d'un support natif dans les prochaines versions de l'API WordPress REST.
Authentification de base
L'authentification de base fait référence au type d'authentification HTTP de base dans lequel les informations de connexion sont envoyées avec les en-têtes de la demande.
Comment fonctionne l'authentification de base ?
Dans l'authentification de base, le client demande une URL qui nécessite une vérification. Le serveur, à son tour, demande au client de s'identifier en envoyant un code 401 non autorisé. En réponse, le client envoie la même demande avec les informations d'identification (dans la paire nom d'utilisateur:mot de passe) ajoutées en tant que chaîne codée en base64. Cette chaîne est envoyée dans le champ d'en-tête d'autorisation comme suit :
Autorisation : de base b3dhaXMuYWxhbUBjbG91ZHdheXMuY29tOmVKNWtuU24zNVc=
Étant donné que les chaînes en base64 peuvent être décodées sans trop d'effort, cette méthode d'authentification n'est pas très sécurisée. ainsi, ces méthodes ne doivent être utilisées que dans des scénarios où il existe une confiance absolue entre le serveur et le client. Une autre application importante de cette méthode est le dépannage au sein d'un système sécurisé.
Découvrez l'hébergement WordPress sans restrictions
Déplacez-le vers Cloudways à l'aide de notre plugin de migration gratuit
Installer le plugin WordPress REST API
Le plugin WordPress REST API vous permet d'ajouter une authentification de base à un site WordPress.
Remarque : «Sans SSL, nous vous recommandons fortement d'utiliser le gestionnaire d'authentification OAuth 1.0a dans les environnements de production.
Le plugin WordPress REST API est disponible auprès du groupe GitHub WordPress REST API. Pour utiliser le plugin, clonez-le simplement dans le répertoire WordPress Plugin et activez-le via l'administrateur WordPress.
Envoyer des demandes authentifiées à l'aide de Postman
Pour commencer à envoyer des demandes d'authentification, installez l'extension Postman Chrome. Il rend le développement d'API plus facile, plus rapide, plus intelligent et meilleur. Pour les utilisateurs de Firefox, installez REST Easy Add-On qui fournit un client REST complet dans le navigateur.
Comme la plupart des clients HTTP, Postman pour Chrome prend en charge l'envoi de requêtes à l'aide de la méthode d'authentification de base de manière native.
Pour envoyer une demande authentifiée, accédez à l'onglet Autorisation sous la barre d'adresse :

Sélectionnez maintenant Basic Auth dans le menu déroulant. Il vous sera demandé de saisir votre nom d'utilisateur et votre mot de passe. Ensuite, cliquez sur le bouton Demande de mise à jour .

Après avoir mis à jour l'option d'authentification, vous verrez un changement dans l'onglet En- têtes . L'onglet comprendra désormais un champ d'en-tête pour la chaîne de nom d'utilisateur/mot de passe codée :

La configuration de l'authentification de base avec Postman est maintenant terminée. Maintenant, envoyez une demande de test (essayez de supprimer un message) qui nécessite une authentification :
Par exemple - SUPPRIMER http://wordpressmu-19393-42425-140587.cloudwaysapps.com/wp-json/wp/v2/posts/50
Où wordpressmu-19393-42425-140587.cloudwaysapps.com peut être remplacé par le chemin de votre serveur de développement.
Si tout se passe bien, le serveur renverra un statut 200 OK , indiquant que le message avec l'id 50 a été supprimé :

Envoyer des demandes authentifiées à l'aide de JavaScript
JavaScript est un langage de programmation interprété de haut niveau et c'est pourquoi de nos jours, JavaScript peut être trouvé presque partout. Ainsi, il est très courant de voir des frameworks JavaScript populaires interagir avec WordPress. Un scénario populaire est l'utilisation de jQuery en interaction avec l'API WordPress. Dans de tels cas, les en-têtes d'autorisation pourraient envoyer une demande AJAX.
Considérez la requête DELETE suivante envoyée via la méthode jQuery.ajax() :
jQuery.ajax({
URL : 'http://wordpressmu-19393-42425-140587.cloudwaysapps.com/wp-json/wp/v2/posts/50',
méthode : 'SUPPRIMER',
crossDomain : vrai,
avantEnvoi : fonction ( xhr ) {
xhr.setRequestHeader( 'Authorization', 'Basic ' + Base64.encode( 'username:password' ) );
},
succès : function( data, txtStatus, xhr ) {
console.log( données );
console.log( xhr.status );
}
});Où Base64 est un objet utilisé pour encoder et décoder une chaîne en base64. Ceci est défini comme suit, juste au-dessus de l'appel de la méthode jQuery.ajax() :

var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=8_Base64._utf (e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>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)}retourner t}, decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9 \+\/\=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt (f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>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);retour t},_utf8_encode:function(e){e=e.replace( /\r\n/g,"\n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r <128){t+=String.fromCharCode(r)}else if(r>127&&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+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e) {var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String. fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{ c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}} renvoie t}} ;Dans la demande ci-dessus, j'ai défini l'en-tête d'autorisation à l'aide de setRequestHeader() pour l'objet xhr passé en argument à la méthode beforeSend() .
En plus de la demande ci-dessus, les en -têtes Access-Control-Allow-Headers doivent autoriser le champ Authorization sur le serveur. Cela peut être activé en ajoutant la ligne suivante au fichier WordPress .htaccess :
En-tête toujours défini Access-Control-Allow-Headers Authorization En-tête toujours défini
La requête ci-dessus, une fois terminée, fera écho à la réponse dans la console du navigateur
![]()
Le code de réponse d'état 200 renvoyé par le serveur indique que le message avec l'identifiant 52 a été supprimé avec succès.
Envoyer des demandes authentifiées à l'aide de l'API HTTP WordPress
Si vous vous connectez à distance à un autre site Web WordPress, l'approche la plus appropriée consiste à envoyer des requêtes HTTP via l'API HTTP WordPress.
Considérez le code suivant qui envoie une demande DELETE à une autre installation WordPress avec l'API REST WordPress et l'authentification de base activée :
$wp_request_headers = array(
'Authorization' => 'Basic' . base64_encode( 'nom d'utilisateur:mot de passe' )
);
$wp_request_url = 'http://wordpressmu-19393-42425-140587.cloudwaysapps.com/wordpress-api/wp-json/wp/v2/posts/50';
$wp_delete_post_response = wp_remote_request(
$wp_request_url,
déployer(
'méthode' => 'SUPPRIMER',
'headers' => $wp_request_headers
)
);
echo wp_remote_retrieve_response_code( $wp_delete_post_response ) . ' ' . wp_remote_retrieve_response_message( $wp_delete_post_response );
Ici, j'ai utilisé wp_remote_request() qui accepte deux arguments ; $url (l'URL de la requête) et $args (le tableau qui contient des arguments supplémentaires à transmettre).
La $method définie dans le tableau $args est DELETE. Le tableau $headers contient tous les champs d'en-tête à transmettre avec la requête. J'ai transmis la clé d'autorisation avec une chaîne de clé de nom d'utilisateur et de mot de passe codée en base64.
La réponse serait enregistrée dans la variable $wp_delete_post_response , qui pourrait être utilisée avec les fonctions wp_remote_retrieve_response_code() et wp_remote_retrieve_response_message() . Ces deux fonctions sont des fonctions d'assistance dans l'API HTTP WordPress, et elles extraient respectivement le code d'état et le message d'état de la réponse.
Si le message est supprimé avec succès via la demande ci-dessus, le texte suivant sera renvoyé :
200 OK
Authentification des cookies
L'authentification par cookie est la méthode d'authentification de base disponible dans WordPress. Au moment de la connexion réussie au tableau de bord WordPress, les cookies corrects sont configurés. Ainsi, les développeurs n'ont qu'à se connecter pour l'authentification.
Cependant, l'API REST intègre une méthode appelée nonces pour traiter les problèmes CSRF. Cela garantit que toutes les activités sur le site Web restent séparées. Cependant, cela nécessite également une manipulation prudente de l'API.
Pour les développeurs utilisant le travail dans le cadre de l'API Javascript, cela est naturellement pris en charge pour vous. C'est l'approche prescrite pour utiliser l'API pour les plugins et les thèmes. Les modèles de données personnalisés peuvent étendre wp.api.models.Base pour garantir que cela est envoyé correctement pour toutes les demandes personnalisées.
Les développeurs effectuant des appels AJAX manuels doivent transmettre un nonce à chaque demande. L'API utilise des nonces avec l'activité définie sur wp_rest . Celles-ci peuvent ensuite être transmises à l'API via le paramètre de données _wpnonce (soit les données POST, soit dans la requête pour les requêtes GET), ou au moyen de l'en - tête X-WP-Nonce .
Remarque : Jusqu'à récemment, de nombreux logiciels avaient une prise en charge sommaire des requêtes DELETE. Par exemple, PHP ne transforme pas le corps d'une requête DELETE en un superglobal. En tant que tel, fournir le nonce comme en-tête est l'approche la plus fiable dans ce scénario.
Il est important de se rappeler que cette stratégie de confirmation dépend des cookies WordPress. Ainsi, cette méthode n'est pertinente que lorsque l'API REST est utilisée dans WordPress et que l'utilisateur actuel est connecté. De plus, l'utilisateur actuel doit disposer d'une autorisation appropriée pour l'activité en cours.
À titre d'exemple, voici comment le client JavaScript intégré crée le nonce :
wp_localize_script( 'wp-api', 'wpApiSettings', array( 'root' => esc_url_raw( rest_url() ), 'nonce' => wp_create_nonce( 'wp_rest' ) ) );
Voici un exemple d'édition du titre d'un article, à l'aide de jQuery AJAX :
$.ajax( {
URL : wpApiSettings.root + 'wp/v2/posts/50',
méthode : 'POSTER',
avantEnvoi : fonction ( xhr ) {
xhr.setRequestHeader( 'X-WP-Nonce', wpApiSettings.nonce );
},
Les données:{
'title' : 'Bonjour Cloudways'
}
} ).done( fonction ( réponse ) {
console.log( réponse );
} );Conclusion
L'API REST WordPress est peut-être l'API REST la plus populaire et la plus utilisée au monde. Il est disponible pour tous ceux qui utilisent WordPress pour les magasins en ligne et les applications Web.
J'espère que vous avez compris tout ce que j'ai écrit dans cet article. Si vous avez encore une question sur le sujet ou si vous souhaitez contribuer à la discussion, veuillez laisser un commentaire ci-dessous.
