Maison  >  Article  >  interface Web  >  Configurer et utiliser l'API WP REST avec l'authentification de base

Configurer et utiliser l'API WP REST avec l'authentification de base

PHPz
PHPzoriginal
2023-08-28 10:17:05847parcourir

Dans la partie introductive de cette série, nous avons passé en revue rapidement l'architecture REST et comment elle nous aide à créer de meilleures applications. Nous avons ensuite exploré l’histoire des API REST dans WordPress et nous sommes présentés au dernier ajout : le plugin WP REST API. Nous avons mis en place un environnement de travail de base pour tester le plugin, qui comprend l'installation du plugin et un client HTTP pour envoyer des requêtes ou visualiser les réponses du serveur.

Dans la partie actuelle de cette série, nous mettrons en place un protocole d'authentification de base sur le serveur pour envoyer des requêtes authentifiées pour effectuer diverses tâches via l'API REST.

Plus précisément, dans cette section, nous allons :

  • Affichez les différentes méthodes d'authentification disponibles lors de l'utilisation du plugin REST API
  • Configurer l'authentification de base sur le serveur
  • Utilisez Postman pour envoyer des demandes authentifiées
  • Utilisez un framework JavaScript pour envoyer des requêtes authentifiées
  • Envoyer des requêtes authentifiées à l'aide de la ligne de commande
  • Envoyer des requêtes authentifiées à l'aide de l'API HTTP WP

Mais regardons d’abord l’authentification elle-même.

Qu'est-ce que l'authentification ?

Dans sa définition la plus élémentaire, la vérification d’identité est le processus de détermination de l’identité d’un individu.

Selon l'Encyclopédie Internet :

Le processus d'identification d'un individu, généralement basé sur un nom d'utilisateur et un mot de passe. Dans les systèmes de sécurité, l'authentification diffère de l'autorisation, qui est le processus consistant à accorder l'accès aux objets du système à un individu en fonction de son identité. L'authentification garantit uniquement qu'un individu est bien celui qu'il prétend être, mais ne précise pas ses droits d'accès.

En parlant de l'API WP REST, un utilisateur disposant d'autorisations suffisantes peut effectuer diverses tâches CRUD telles que la création d'une publication, la récupération de tous les utilisateurs du site ou la révocation des autorisations d'un utilisateur. Mais pour toutes ces opérations, l’utilisateur doit prouver son identité au serveur, et c’est là qu’intervient l’authentification.

Sans authentification appropriée, il est facile pour une personne aux ambitions malicieuses de compromettre un site Web. L'authentification fournit donc la couche de sécurité nécessaire pour limiter les autorisations d'un utilisateur et les actions qu'il peut effectuer.

Utilisez l'API WP REST pour l'authentification

L'API WP REST propose trois options d'authentification, chacune ayant un objectif spécifique. Les options sont :

  • Authentification de base
  • Authentification OAuth
  • authentification par cookie

Actuellement, la manière native de s'authentifier avec WordPress consiste à utiliser l'authentification par cookie. C’est ainsi que WordPress détermine qui est un utilisateur et quelles actions il peut effectuer. Pour utiliser les deux autres méthodes d'authentification répertoriées ci-dessus avec l'API WP REST, nous devons installer les plugins correspondants fournis par l'équipe WP REST API sur GitHub. Espérons que les deux méthodes seront également incluses dans le noyau de WordPress via le plugin REST API lui-même.

L'authentification de base est le type d'authentification HTTP le plus basique où les informations de connexion sont envoyées avec les en-têtes de requête.

Comment fonctionne l'authentification de base

Dans l'authentification de base, le client demande une URL qui nécessite une authentification. Le serveur demande au client (ou à l'agent utilisateur) de s'authentifier en envoyant un code 401-Not Authorized. En retour, le client renvoie la même requête, mais avec les identifiants de connexion sous la forme d'une chaîne encodée en Base64, envoyée dans le champ d'en-tête 用户名:password。该字符串在 Authorization comme ceci :

Authorization: Basic {base64_encode(username:password)}

Donc si le nom d'utilisateur est tutsplus 并且密码是 123456, les champs d'en-tête suivants seront envoyés avec la demande :

Authorization: Basic dHV0c3BsdXM6MTIzNDU2

Étant donné que les chaînes codées en base64 peuvent être facilement décodées, cette méthode est très dangereuse à utiliser sur les réseaux ouverts. Par conséquent, cette méthode ne doit être utilisée qu’à des fins de débogage et de développement lorsque la connexion entre le serveur et le client est fiable.

Installer le plugin

Comme mentionné ci-dessus, l'équipe WP REST API fournit le plugin sur GitHub. Il suffit donc de le cloner dans le répertoire plugins et de l'activer.

Accédez à vos /wp-content/plugins/ 目录并克隆您可能需要 sudo autorisations pour exécuter les commandes du plugin. Pour ce faire, lancez la commande suivante :

$ sudo git clone https://github.com/WP-API/Basic-Auth.git

Le terminal vous demandera de saisir votre mot de passe. Entrez votre mot de passe et clonez le référentiel dans un répertoire.

Après avoir cloné le plugin, activez-le via WP Administrator. Les méthodes d'authentification HTTP de base peuvent désormais être utilisées avec le plugin REST API.

Utilisez Postman pour envoyer des demandes authentifiées

La plupart des clients HTTP prennent en charge nativement l'envoi de requêtes à l'aide de la méthode d'authentification de base, tout comme Postman pour Chrome. Pour envoyer une demande authentifiée, rendez-vous dans l'onglet Autorisation sous la barre d'adresse :

使用基本身份验证设置和使用WP REST API

现在从下拉菜单中选择基本身份验证。系统将要求您输入用户名和密码。输入您的凭据后,点击更新请求按钮。

使用基本身份验证设置和使用WP REST API

更新身份验证选项后,您将在标头选项卡中看到更改,并且现在包括一个标头字段,其中包含编码的用户名和密码字符串:

使用基本身份验证设置和使用WP REST API

这就是我们如何使用 Postman 设置基本身份验证。现在您可以发送测试请求,例如删除帖子,这需要身份验证:

DELETE http://dev-server/wp-json/wp/v2/posts/52

其中 dev-server 是您的开发服务器的路径。

如果一切顺利,服务器将返回200 OK状态代码,表明id为52的帖子已被删除:

使用基本身份验证设置和使用WP REST API

不用担心我们在这里提出的请求 - 我们将在以后的部分中更详细地讨论它该系列。

从命令行发送经过身份验证的请求

我们可以使用命令行使用此方法发送经过身份验证的请求。考虑以下与上述请求等效的 curl

curl --request DELETE -I --user  admin:password http://dev-server/wp-json/wp/v2/posts/52

服务器将发送以下响应,表明一切正常:

HTTP/1.1 200 OK
Date: Fri, 28 Aug 2015 20:02:43 GMT
Server: Apache/2.4.6 (CentOS) PHP/5.6.12
X-Powered-By: PHP/5.6.12
Set-Cookie: PHPSESSID=k0rg6mcbsie7ufvoav219lqre0; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
X-Content-Type-Options: nosniff
Link: <http://localserver/wordpress-api/demo-post-28/>; rel="alternate"; type=text/html
Allow: GET, POST, PUT, PATCH, DELETE
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8

--request 选项指定要使用的请求方法,在我们的示例中为 DELETE。您还可以使用 -X 作为 --request 选项的替代选项。

-I 选项仅获取服务器发送的 HTTP 标头。 -I 的替代选项是 --head 选项。

使用 JavaScript 发送经过身份验证的请求

如果您使用客户端 JavaScript 框架(例如 jQuery)与启用了 WP API 的 WordPress 站点进行远程交互,则可以在 AJAX 请求中发送授权标头。考虑通过 jQuery.ajax() 方法发送的以下 DELETE 请求:

$.ajax({
    url: 'http://dev-server/wp-json/wp/v2/posts/52',
	method: 'DELETE',
	crossDomain: true,
	beforeSend: function ( xhr ) {
    	xhr.setRequestHeader( 'Authorization', 'Basic ' + Base64.encode( 'username:password' ) );
	},
	success: function( data, txtStatus, xhr ) {
		console.log( data );
		console.log( xhr.status );
	}
});

其中 Base64 是用于编码和解码 Base64 字符串的对象。在上面的 jQuery.ajax() 方法调用之前,其定义如下:

var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(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)}return 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);return 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}}return t}};

我在 StackOverflow 上找到了它,它是一种在 JavaScript 中编码和解码 Base64 字符串的跨浏览器方式。

在上述请求中,我们使用 xhr 对象的 setRequestHeader() 方法作为参数传递给 Authorization 标头beforeSend() 方法。

除了上述请求之外,Access-Control-Allow-Headers 标头还应允许服务器上的 Authorization 字段。可以通过在 WordPress .htaccess 文件中添加以下代码行来启用此功能:

Header always set Access-Control-Allow-Headers Authorization Header always set

上述请求完成后,将在浏览器控制台中回显响应,如下图所示:

使用基本身份验证设置和使用WP REST API

服务器返回的200状态响应代码显示id为52已成功删除。

使用 WP HTTP API 发送经过身份验证的请求

如果您通过 WordPress 安装与另一个 WordPress 站点进行远程交互,发送 HTTP 请求的最合适方法是 WP HTTP API。

考虑以下代码,该代码将 DELETE 请求发送到另一个启用了 WP REST API 和基本身份验证的 WordPress 安装:

$wp_request_headers = array(
    'Authorization' => 'Basic ' . base64_encode( 'username:password' )
);

$wp_request_url = 'http://localserver/wordpress-api/wp-json/wp/v2/posts/52';

$wp_delete_post_response = wp_remote_request(
	$wp_request_url,
	array(
		'method'	=> 'DELETE',
		'headers' 	=> $wp_request_headers
	)
);

echo wp_remote_retrieve_response_code( $wp_delete_post_response ) . ' ' . wp_remote_retrieve_response_message( $wp_delete_post_response );

这里我们使用了 wp_remote_request() 函数,它接受两个参数:

  • $url: 请求的URL
  • $args:要传递的附加参数数组

$args 数组中定义的 $method 数组是 DELETE,并且应始终以大写形式书写。 $headers 数组采用随请求传递的所有标头字段的键值对。我们已经传递了 Authorization 密钥,其值为 base64 编码的用户名和密码字符串。

响应将保存在 $wp_delete_post_response 变量中,我们可以将其与 wp_remote_retrieve_response_code()wp_remote_retrieve_response_message() 一起使用功能。这两个函数是 WP HTTP API 中的辅助函数,它们分别从响应中提取状态代码和状态消息。

如果通过上述请求成功删除帖子,则会回显以下文本:

200 OK

这就是 WP REST API 支持的基本身份验证方法。由于其简单性,除非另有说明,我们将在未来的部分中使用相同的身份验证方法来检索、创建或修改数据。

结论

在本系列的当前部分中,我们仔细研究了 WP REST API 支持的基本 HTTP 身份验证方法。但是,它不应该在实时生产环境中使用,因为 Base64 编码的字符串很容易被解码,并且您的凭据可能会落入坏人之手。

成功设置并测试 HTTP 基本身份验证方法后,我们准备进一步设置更复杂的身份验证方式 — OAuth 1.0a 方法。我们将在本系列的下一部分中做到这一点,敬请期待!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn