API REST de WP configuración y uso de autenticación básica

En la parte introductoria de esta serie, tuvimos un rápido repaso de la arquitectura REST y cómo puede ayudarnos a crear mejores aplicaciones. Luego exploramos la historia de las API REST en WordPress y nos presentamos a la última adición: el complemento WP REST API. Configuramos un entorno de trabajo básico para las pruebas con el complemento, que incluía la instalación del complemento y un cliente HTTP para enviar solicitudes o ver la respuesta del servidor.

En la parte actual de la serie, configuraremos un protocolo de autenticación básico en el servidor para enviar solicitudes autenticadas para realizar diversas tareas a través de la API REST..

Para ser específicos, en esta parte vamos a:

  • mire los diversos métodos de autenticación disponibles al usar el complemento REST API
  • configurar la autenticación básica en el servidor
  • enviar solicitud autenticada utilizando el cartero
  • enviar solicitud autenticada utilizando el marco de JavaScript
  • enviar solicitud autenticada utilizando la línea de comandos
  • enviar solicitud autenticada utilizando WP HTTP API

Pero primero echemos un vistazo a la autenticación en sí misma..

¿Qué es la autenticación?

En su definición más básica, la autenticación es el proceso de determinar la identidad de una persona.

Según Webopedia:

El proceso de identificación de un individuo, generalmente basado en un nombre de usuario y contraseña. En los sistemas de seguridad, la autenticación es distinta de la autorización, que es el proceso de otorgar a las personas acceso a los objetos del sistema en función de su identidad. La autenticación simplemente garantiza que la persona es quien dice ser, pero no dice nada sobre los derechos de acceso de la persona..

Cuando se habla de la API REST de WP, un usuario con suficientes privilegios puede realizar varias tareas de CRUD, como crear una publicación, recuperar a todos los usuarios del sitio o revocar los derechos de un usuario. Pero para todas estas acciones, uno debe demostrar su identidad al servidor, y ahí es donde la autenticación juega su papel..

Sin una autenticación adecuada, sería muy fácil para alguien con ambiciones maliciosas manipular el sitio, por lo que la autenticación proporciona un nivel de seguridad necesario para restringir los derechos de un usuario y las acciones que podrían realizarse..

Autenticación con la API REST WP

La API de REST de WP proporciona tres opciones para la autenticación, cada una destinada a un propósito específico. Estas opciones son:

  • autenticación básica
  • Autenticación OAuth
  • autenticación de cookies

En este momento, la forma nativa de autenticarse con WordPress es la autenticación mediante cookies. Así es como WordPress determina la identidad de un usuario y qué acciones puede realizar. Para usar los otros dos métodos de autenticación enumerados anteriormente con la API REST de WP, debemos instalar sus respectivos complementos proporcionados por el equipo de API REST de WP disponible en GitHub. Con suerte, estos dos métodos también se incluirán en el núcleo de WordPress con el complemento REST API..

La autenticación básica es el tipo más básico de autenticación HTTP, en el que las credenciales de inicio de sesión se envían junto con los encabezados de la solicitud..

Cómo funciona la autenticación básica

En la autenticación básica, el cliente solicita una URL que requiere autenticación. El servidor solicita al cliente (o agente de usuario) que se autentique a sí mismo mediante el envío de un 401-No autorizado código. El cliente, a cambio, devuelve la misma solicitud pero con credenciales de inicio de sesión como una cadena codificada en base64 en el formato usuario Contraseña. Esta cadena se envía en el Autorización campo de cabecera como el siguiente:

Autorización: Basic base64_encode (nombre de usuario: contraseña)

Así que si el nombre de usuario es tutsplus y la contraseña es 123456, El siguiente campo de encabezado se enviaría con la solicitud:

Autorización: Basic dHV0c3BsdXM6MTIzNDU2

Dado que la cadena codificada en base64 se puede descodificar fácilmente, este método es altamente inseguro para ser utilizado en una red abierta. Por lo tanto, este método solo se debe utilizar para fines de depuración y desarrollo cuando la conexión entre el servidor y el cliente es de confianza..

Instalando el plugin

Como se mencionó anteriormente, el complemento está disponible en GitHub del equipo WP REST API. Así que todo lo que tenemos que hacer es clonarlo en nuestro plugins directorio y activarlo.

Dirígete a tu / wp-content / plugins / Directorio y clonar el plugin para el que pueda necesitar sudo Derechos para ejecutar el comando. Para ello, emita lo siguiente:

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

El terminal le pedirá su contraseña. Ingrese su contraseña y permita que el repositorio sea clonado en un directorio.

Después de clonar el complemento, actívelo a través de su administrador de WP. El método básico de autenticación HTTP ahora se puede utilizar con el complemento REST API.

Envío de solicitudes autenticadas utilizando Postman

La mayoría de los clientes HTTP admiten el envío de una solicitud utilizando el método de autenticación básica de forma nativa, y Postman para Chrome también. Para enviar una solicitud autenticada, vaya a la Autorización pestaña debajo de la barra de direcciones:

Ahora seleccione Autentica Básica desde el menú desplegable. Se le pedirá que ingrese su nombre de usuario y contraseña. Después de ingresar sus credenciales, haga clic en Solicitud de actualización botón.

Después de actualizar la opción de autenticación, verá un cambio en el Encabezados pestaña, y ahora incluye un campo de encabezado que contiene el nombre de usuario codificado y la cadena de contraseña:

Eso es todo acerca de cómo configuramos la autenticación básica con Postman. Ahora puede enviar una solicitud de prueba como eliminar una publicación, que requiere autenticación:

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

Dónde servidor dev es el camino a su servidor de desarrollo.

Si todo va bien, el servidor devolverá un 200 ok código de estado, que indica que la publicación con un ID de 52 ha sido eliminado:

No se preocupe por la solicitud que hicimos aquí, la analizaremos con más detalle en las partes futuras de la serie..

Envío de solicitudes autenticadas desde la línea de comandos

Podemos usar la línea de comandos para enviar solicitudes autenticadas usando este método. Considera lo siguiente rizo equivalente a la solicitud anterior:

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

La siguiente respuesta sería enviada por el servidor, indicando que todo está bien:

HTTP / 1.1 200 OK Fecha: viernes, 28 de agosto de 2015 20:02:43 Servidor GMT: Apache / 2.4.6 (CentOS) PHP / 5.6.12 X-Powered By: PHP / 5.6.12 Set-Cookie: PHPSESSID = k0rg6mcbsie7ufvoav219lqre0; ruta = / Caduca: Jueves, 19 de noviembre de 1981 08:52:00 GMT Control de caché: no almacenar, no caché, debe revalidar, post-check = 0, pre-chequeo = 0 Pragma: no-caché X- Opciones de tipo de contenido: nosniff Link: ; rel = "suplente"; type = text / html Permitir: GET, POST, PUT, PATCH, DELETE Transfer-Encoding: Chunked Content-Type: application / json; conjunto de caracteres = UTF-8

los --solicitud La opción especifica el método de solicitud que se utilizará, que en nuestro caso es BORRAR. También puedes usar -X como alternativa a la --solicitud opción.

los -yo La opción solo obtiene los encabezados HTTP enviados por el servidor. La alternativa a -yo es el --cabeza opción.

Envío de solicitudes autenticadas utilizando JavaScript

Si está utilizando un marco de JavaScript del lado del cliente, como jQuery, para interactuar de forma remota con un sitio de WordPress que tiene habilitada la API de WP, puede enviar los encabezados de autorización en una solicitud AJAX. Considera lo siguiente BORRAR solicitud enviada a través del jQuery.ajax () método:

$ .ajax (url: 'http: // dev-server / wp-json / wp / v2 / posts / 52', método: 'DELETE', crossDomain: true, beforeSend: function (xhr) xhr.setRequestHeader ( 'Autorización', 'Básico' + Base64.encode ('nombre de usuario: contraseña'));, success: function (data, txtStatus, xhr) console.log (data); console.log (xhr.status); );

Dónde Base64 es un objeto utilizado para codificar y decodificar una cadena base64. Se define como sigue, antes de lo anterior. jQuery.ajax () método de llamada:

var Base64 = _ keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /, codificar: función (e) var, var, r, i, s, o, u, a, var f = 0; e; mientras (f> 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, decodificar: función (e) var; var n, r, i; var s, o, u, a; var f = 0 ; e = e.replace (/ [^ A-Za-z0-9 \ + \ / \ =] / g, ""); while (f> 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;for(var n=0;n127 && 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; var n = 0; var r = c1 = c2 = 0; while (n191 && r<224)c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2elsec2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3return t;

Lo encontré en StackOverflow, y es una forma de navegador cruzado para codificar y decodificar una cadena base64 en JavaScript.

En la solicitud anterior, establecemos la Autorización encabezado usando el setRequestHeader () método de la xhr objeto pasado como un argumento a la antes de Enviar () método.

Además de la solicitud anterior, el Acceso-Control-Permitir encabezados los encabezados deben permitir la Autorización campo en el servidor. Esto se puede habilitar agregando la siguiente línea de código en su archivo .htaccess de WordPress:

Encabezado siempre configurado Acceso-Control-Permitir Encabezados Autorización Encabezado siempre configurado

La solicitud anterior, cuando se complete, hará eco de la respuesta en la consola de su navegador como se muestra en la siguiente figura:

los 200 El código de respuesta de estado devuelto por el servidor muestra que la publicación con un ID de 52 ha sido eliminado exitosamente.

Envío de solicitudes autenticadas mediante la API HTTP de WP

Si está interactuando de forma remota con otro sitio de WordPress desde su instalación de WordPress, la forma más adecuada de enviar solicitudes HTTP es la API HTTP de WP..

Considere el siguiente código que envía un BORRAR solicitar a otra instalación de WordPress con WP REST API y autenticación básica habilitada:

$ wp_request_headers = array ('Autorización' => 'Básico'. base64_encode ('nombre de usuario: contraseña')); $ 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);

Aquí usamos el wp_remote_request () Función que acepta dos argumentos:

  • $ url: la URL de la solicitud
  • $ args: una matriz de argumentos adicionales para ser pasados

los $ método definido en el $ args matriz es BORRAR, y siempre debe estar escrito en mayúsculas. los $ encabezados La matriz toma pares de valores clave de todos los campos de encabezado para pasar con la solicitud. Hemos pasado el Autorización clave con un nombre de usuario codificado en base64 y una cadena de contraseña como su valor.

La respuesta se guardaría en el $ wp_delete_post_response variable, que podemos usar con el wp_remote_retrieve_response_code ()wp_remote_retrieve_response_message () funciones Estas dos funciones son funciones de ayuda en la API HTTP de WP y extraen el código de estado y el mensaje de estado de la respuesta respectivamente.

Si la publicación se elimina exitosamente por la solicitud anterior, el siguiente texto se repetirá:

200 ok

Eso es todo sobre el método de autenticación básico admitido por la API REST de WP. Utilizaremos el mismo método de autenticación en nuestras partes futuras para recuperar, crear o modificar datos debido a su simplicidad, a menos que se indique lo contrario..

Conclusión

En la parte actual de la serie, analizamos detenidamente el método de autenticación HTTP básico admitido por la API REST de WP. Sin embargo, no se debe utilizar en entornos de producción en vivo debido a que la cadena codificada en base64 podría decodificarse fácilmente y sus credenciales podrían caer en las manos equivocadas.

Después de haber configurado y probado con éxito el método de autenticación básica HTTP, estamos listos para dar un paso más y configurar una forma más sofisticada de autenticación: el método OAuth 1.0a. Lo haremos en la próxima parte de la serie, así que estad atentos.!