X

Autenticación con JWT en la API de WordPress

En un artículo anterior habíamos visto cómo usar la API Rest de WordPress, en los ejemplos usamos la autenticación básica como demostración, sin embargo una autenticación que se usa en proyectos reales es usualmente la autenticación con JWT (Json Web Token)

 

Generalidades

WordPress por defecto usa cookies para comprobar que un usuario esta logueado, sin embargo una manera alterna de validar un usuario es usar JWT, el cual es especialmente usado para conectarse con APIs.

 

¿Qué es JWT (JSON Web Token)?

Es un estándar basado en JSON para crear un token, el cual se envía entre aplicaciones. El uso más común de los JWT es el manejo de autenticación entre aplicaciones móviles o web.

La apariencia del token es una cadena de texto similar al siguiente código


eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC93b3JkcHJlc3M1Ni5sb2NhbCIsIm
lhdCI6MTYzNDA1MTkwNiwibmJmIjoxNjM0MDUxOTA2LCJleHAiOjE2MzQ2NTY3MDYsImRhdGEiOnsidXNlciI6e
yJpZCI6IjEifX19.a7y7HV8ig1A8kxs-L8LnJiYZIhOppXOOipQp7J3msXc

 

¿Cómo funciona el JWT?

Cuando un usuario se autentica manda sus datos de inicio de sesión al servidor, si la autenticación es correcta el servidor genera el JWT y lo manda como respuesta al cliente.

 
Luego, en cada petición el cliente envía ese token y el servidor lo usa para saber qué usuario es y si esta autenticado y envía la respuesta requerida.

 

Estructura de un JWT

JWT es una cadena de caracteres que nos puede parecer aleatoria, sin embargo si usamos algún servicio como JWT.io para decodificarla, podremos comprobar que esa cadena tiene tres partes bien diferenciadas.

  • Cabecera Es un objeto JSON que define el tipo de token y el algoritmo de encriptacion usado.
  • Payload Contiene usualmente información del usuario además de adicionales que comprueban por ejemplo la expiración del token.
  • Firma Esta formado por la cabecera, el Payload y una contraseña, es una cadena encriptada y que sirve para verificar la validez del token.

 
En la siguiente imagen vemos una cadena token decodificada en sus tres partes:

 

JWT en WordPress

Para tener la funcionalidad de JWT en WordPress será necesario usar un plugin (al menos en las versiones actuales), el plugin que usaremos será JWT Authentication for WP REST API

 

Configuración del plugin

La configuración básica se encuentra en la página oficial del plugin, en la mayoría de los casos sólo será necesario configurar la constante JWT_AUTH_SECRET_KEY en el archivo wp-config.php

define('JWT_AUTH_SECRET_KEY', 'una-clave-secreta');

 

Generando el JWT para un usuario

Para este ejemplo usaremos la aplicación Postman, que es un software cliente para probar APIs de forma simple.

El plugin crea un nuevo namespace /jwt-auth/v1 , por lo tanto podemos usar la siguiente ruta para obtener un token:

/wp-json/jwt-auth/v1/token | POST

En la siguiente imagen vemos el uso de Postman para obtener un nuevo token:

 

El token obtenido se puede guardar en el Localstorage del navegador para sucesivas peticiones.

 

Creación de una nueva entrada en WordPress

Una vez obtenido el token podemos realizar peticiones al servidor incluyendo el token como parte de la petición, en nuestro ejemplo crearemos una nueva entrada.

Para la nueva entrada usamos la ruta de la Rest API de WordPress:

/wp-json/wp/v2/posts | POST

Primero agregamos el token como parte de las cabeceras

 
Luego completamos los datos para la creación de la entrada

 
Al final obtendremos una nueva entrada creada que podemos ver desde la administración de WordPress.

 

Conclusión

Como has podido comprobar puedes habilitar la funcionalidad de JWT en WordPress de forma simple a través de un plugin y de esta forma autenticar usuarios e integrar otros sistemas para hacer consultas y modificaciones en tu sitio web WordPress.

 

Suscríbete a DecodeCMS:  

 

Categorías: Plugins
Etiquetas: seguridad

Ver comentarios (8)

  • Hola. Gracias por este gran post.
    Te quería preguntar si este plugin me sirve para acceder a un WordPress que tenemos hecho, desde un sitio web diferente por medio de una autenticación de google.
    Mil gracias.

    • Hola, en la primera parte para la autenticación por JWT siempre necesitarás un usuario registrado de WordPress. Cuando se usa autenticación por Google los usuarios también deberían existir en WordPress. Revisa plugins de autenticación con Google, posiblemente te ayuden con esto. Espero abordar este caso de autenticaciones con servicios externos en futuros tutoriales.

  • Como puedo hacer lo mismo con una tabla mía para agregar modificar y eliminar datos , el post me agrega un registro pero los datos están vacíos

  • Hola! He configurado todo como decis en los pasos. Pero cuando hago la peticion me da este error:

    {
    "code": "jwt_auth_bad_config",
    "message": "JWT is not configured properly, please contact the admin",
    "data": {
    "status": 403
    }
    }

    Hasta he confiugarado .htacces tal como me lo dice la doc del plugin, pero no funciona

  • Hola, excelente material, una pregunta: este pluging se usa gratis opciones básicas o solo es de prueba? porque lo instale hace unas dos semanas y ahora que voy a demostrar su efectividad no funciona correctamente, lo desactive, lo borre, y lo volvi a instalar.

    • Hola, el plugin tiene una versión pro, pero para lo que hacemos en el artículo debería ser suficiente la versión gratuita