Cómo configurar y usar la autenticación OAuth usando WP REST API

Publicado: 2016-11-30
configurar wordpress rest api
Siga @Cloudways

Cuando se trata de la API REST de WordPress, OAuth es el proveedor de manejo de autenticación más común.

Cuando la autenticación OAuth está en su lugar, los usuarios primero inician sesión a través del formulario de inicio de sesión de WordPress que está en uso en el sitio web. sin embargo, este inicio de sesión también autoriza a los clientes a manejar solicitudes en su nombre y todas las solicitudes posteriores se validan mediante tokens OAuth. Esos tokens también se utilizan para administrar todas las solicitudes de acceso a la API. Este acceso se puede revocar en cualquier momento.

Quizás, el uso más importante del proceso de autenticación OAuth es el proceso seguro de manejar solicitudes de API REST sin exponer las credenciales de los usuarios. Esto es particularmente importante en el caso de servidores de producción donde las credenciales se intercambian a menudo. En tales escenarios, la autenticación OAuth se utiliza para proporcionar un procedimiento seguro para manejar solicitudes frecuentes de credenciales de inicio de sesión.

  • Autenticación tradicional frente a OAuth
  • Flujo de trabajo de autenticación OAuth
  • Instalación de autenticación OAuth
  • Evaluación de la disponibilidad de la API de OAuth
  • Crear y administrar aplicaciones
  • CLI de cliente para generar credenciales OAuth
  • Cliente HTTP para generar credenciales OAuth
  • Adquirir credenciales temporales
  • Autorización de usuario
  • Intercambio de tokens
  • Envío de una solicitud de prueba autenticada

Autenticación tradicional frente a OAuth

Para comprender la importancia de la autenticación OAuth, es importante comprender el modelo de autenticación tradicional y OAuth.

En el modelo de autenticación tradicional, hay dos entidades clave; Cliente y proveedor de recursos / servicios. El cliente puede ser una aplicación web, un servicio o un usuario, mientras que el proveedor de recursos / servicios tiene los recursos o servicios deseados en un entorno de acceso restringido.

Cuando el cliente requiere un recurso en particular, se autentica con el proveedor de recursos proporcionando las credenciales adecuadas. Si bien este es un proceso simple, también existe un gran riesgo de violación de seguridad.

Por el contrario, el modelo de autenticación OAuth es un poco más complejo con tres entidades; Cliente que actúa en nombre del usuario, Usuario que requiere acceso a un recurso y el Servidor que mantiene el recurso.

Dado que hay tres entidades, el proceso se conoce como autenticación de tres patas. Sin embargo, en los casos en que el Cliente y el Usuario son las mismas entidades, el proceso de autenticación se convierte en autenticación de dos vías.

Flujo de trabajo de autenticación OAuth

Flujo de trabajo

  • El Cliente solicita la autorización del Usuario para acceder al Servidor .
  • Si el Usuario concede la solicitud, el Cliente recibe el derecho a continuar.
  • El Cliente presenta su identidad y el mandato del Cliente al Servidor de autorización (API) y solicita un token.
  • En caso de validación exitosa de la identidad y el mandato, el servidor de autorización (API) emite un token de acceso al cliente . En este punto, la autenticación está completa.
  • A continuación, el Cliente se acerca al Servidor para solicitar un recurso en particular. En este punto, el Cliente también envía el token de acceso al
  • Si se valida el token de acceso, el servidor otorga acceso al recurso solicitado.

El cliente origina la solicitud firmada de un token de solicitud. Esta solicitud también se conoce como credenciales temporales. La solicitud se envía al URI de punto final relevante. Esta solicitud consta de varios parámetros importantes:

  • oauth_consumer_key : esta clave identifica la aplicación que origina la solicitud.
  • oauth_timestamp : los servidores utilizan esta marca de tiempo para optimizar el almacenamiento de nonces.
  • oauth_nonce : este es el token único generado por la aplicación para cada solicitud individual.
  • oauth_signature : esta parte importante de la solicitud de API es el hash de todos los componentes de la solicitud y algunos valores de OAuth.
  • oauth_signature_method : el complemento OAuth ofrece un método de firma única: HMAC-SHA1.
  • oath_callback : la URL a la que se redirige al usuario después de la autorización. Se verifica la solicitud y se emite un Token de solicitud con los siguientes parámetros.
  • oauth_token : este es el token de la aplicación que se quita de la respuesta del servidor de autorización. Luego, este token se envía al servidor API.
  • oauth_token_secret : es similar a la contraseña de usuario. A continuación, el Cliente autoriza la solicitud. Para ello, se crea un URI de solicitud y se agrega oauth_token al URI del extremo de autorización del servidor. El Usuario autoriza el envío de esta solicitud proporcionando las credenciales adecuadas.

En el caso de que el URI oauth_callback esté disponible en el primer paso, el servidor redirige al URI con los siguientes parámetros agregados a la cadena de consulta:

  • oauth_token : ya tengo el token.
  • oauth_verifier : verifica la identidad del propietario del recurso para el cliente.

Si el URI oauth_callback no se proporcionó en el primer paso, el servidor envía el valor de oauth_verifier para que el propietario del recurso pueda informar al cliente manualmente.

Después de recibir oauth_verfier , el cliente solicita al servidor credenciales de token. Esto toma la forma de una solicitud al URI del extremo de la solicitud de token. Esta solicitud contiene los siguientes parámetros:

  • oauth_token
  • oauth_verfier
  • oauth_consumer_key
  • oauth_signature
  • oauth_signature_method
  • oauth_nonce
  • oauth_version

Instalación de autenticación OAuth

En el contexto de WordPress, la autenticación OAuth se implementa instalando la API de autenticación OAuth para WordPress. Esto se basa en las especificaciones de OAuth 1.0a y en realidad amplía estas especificaciones mediante un parámetro adicional wp_scope. Este parámetro se envía al extremo de solicitud de credencial temporal .

El complemento está disponible en Github del equipo WP REST API. Por el momento, la versión 4.4 y posteriores son compatibles.

Comenzaré el proceso de clonación del complemento moviéndome al directorio / wp-content / plugins / :

 clon de git https://github.com/WP-API/OAuth1.git 

Instalación de Git

Una vez finalizada la descarga, active el complemento a través de la CLI de WordPress:

 complemento wp activar OAuth1

Si no desea utilizar la CLI de WordPress, puede ir al Administrador de WordPress >> Complementos y activar el complemento desde el menú. Alternativamente, también puede activarlo navegando en su navegador a la sección de complementos de administración de WordPress si no desea utilizar WP CLI.

Evaluación de la disponibilidad de la API de OAuth

Antes de iniciar el protocolo de enlace de OAuth, primero comprobaré si la API está habilitada en el servidor. Esto se hace enviando una simple solicitud GET al / wp-json / endpoint y luego analizar la respuesta enviada por el servidor.

 OBTENGA http: // Server-Dev / wp-json /

Esto devolverá una respuesta JSON de la siguiente manera:

con autenticacion

Mi enfoque aquí es el valor oauth1 en el valor de la propiedad de autenticación . Este objeto tiene las siguientes propiedades definidas:

  • solicitud : el punto final de solicitud de credencial temporal
  • autorizar : el punto final de autorización del propietario del recurso
  • acceso : el punto final de la solicitud de token
  • versión : la versión de OAuth que se está utilizando

Si la API de OAuth no está habilitada para un sitio, la respuesta del servidor contendrá un valor de propiedad de autorización vacío.

sin autenticacion

Crear y administrar aplicaciones

El primer paso es asegurarse de que el complemento OAuth1.0 esté instalado y activado correctamente.

A continuación, puedo crear y administrar aplicaciones yendo al Administrador de WordPress >> Usuarios >> Aplicaciones.

utilizar formulario de solicitud

En esta página de Aplicaciones registradas, registraré una nueva aplicación haciendo clic en el botón Agregar nueva y luego completando los siguientes tres campos:

  1. Nombre del cliente: el nombre del cliente que aparece en la sección Aplicaciones autorizadas y durante el proceso de autorización.
  2. Descripción : la descripción opcional del cliente.
  3. URL de devolución de llamada: la URL de devolución de llamada se utiliza al generar credenciales temporales.

Una vez creado al hacer clic en el botón Guardar cliente , los parámetros Clave del cliente y Secreto del cliente aparecerán en la parte inferior de la página para este cliente en particular.

credencial de juramento

Ahora clonaré el repositorio en el cliente ejecutando el siguiente comando:

 clon de git https://github.com/WP-API/client-cli 

CLI del cliente

Ahora navegue al directorio clonado e instale las dependencias del paquete usando Composer:

 cd cliente-cli
instalación del compositor

Si todo va bien, la línea de comando debería mostrar algo similar a lo siguiente:

instalación del compositor

CLI de cliente para generar credenciales OAuth

Para iniciar el proceso de autorización de OAuth, primero obtendré los siguientes parámetros del servidor:

  • oauth_consumer_key
  • oauth_consumer_secret

Esto se generará a través de la terminal y ejecutará el siguiente comando CLI de WordPress:

 wp oauth1 añadir

La clave y el secreto son oauth_consumer_key y oauth_consumer_secret respectivamente.

Ahora necesito vincular el cliente al sitio de WordPress. En el cliente, navegue hasta el directorio client-cli (clonado anteriormente) y ejecute el siguiente comando:

 wp --require = client.php api oauth1 connect http: // Server-Dev / --key = <su clave aquí> --secret = <su secreto aquí>

Reemplace la URL, la clave y el secreto en el comando anterior. La salida debería ser como la siguiente:

 wp --require = client.php api oauth1 connect http: // your-server / wordpress-api / --key = <your key> --secret = <your secret code>
Abra en su navegador: http: // su-servidor / wordpress-api / oauth1 / authorize? Oauth_token = <your-token>
Introduzca el código de verificación:

Navegue a la URL proporcionada por el servidor y autentíquese haciendo clic en el botón Autorizar :

conectar WP REST API

Se le presentará el token de verificación (o el oauth_verifier) ​​en la siguiente pantalla:

Token de congelación

Copie el verificador y péguelo en la terminal. Se le dará una clave y un secreto , que son básicamente oauth_token y oauth_token_secret respectivamente:

Cliente HTTP para generar credenciales OAuth

Debido a que el complemento de servidor OAuth 1.0a sigue el flujo estándar de tres vías, la generación de credenciales OAuth implica los siguientes pasos:

  • Adquisición de credenciales temporales
  • Autorizaciones de usuario
  • Intercambio de tokens

Adquirir credenciales temporales

Enviaré una solicitud POST a / oauth1 / request endpoint para obtener credenciales temporales. Tenga en cuenta que este punto final debe poder detectarse automáticamente, ya que un servidor podría reemplazar la ruta por sí solo.

La solicitud POST debe incluir los parámetros oauth_consumer_secret adquiridos al registrar un consumidor para la aplicación. La solicitud también puede incluir el parámetro oauth_callback y esta URL de devolución de llamada debe coincidir con el esquema, el host, el puerto y la ruta de la URL de devolución de llamada que se proporcionó al registrar la aplicación.

Además de los parámetros oauth_consumer_key y oauth_consumer_secret , la solicitud también debe incluir los parámetros oauth_signature y oauth_signature_method .

Cuando se utiliza Postman, la firma oauth_signature se genera automáticamente. Solo necesito mencionar el parámetro oauth_signature_method . Por el momento, solo el método de firma HMAC-SHA1 es compatible con el complemento del servidor OAuth.

Ahora configuraré Postman para enviar una solicitud POST al punto final de credenciales de token temporal. A continuación, en la pestaña Autorización , seleccione la opción OAuth 1.0 del menú desplegable. Complete los campos Clave del consumidor y Secreto del consumidor con los valores proporcionados por el consumidor. Finalmente, verifique que la opción Método de firma esté configurada en HMAC-SHA1 .

Autorización de usuario

Para el paso de autorización del usuario, abriré el punto final de autorización del propietario del recurso en el navegador y pasaré el oauth_token y oauth_token_secret como se obtuvo en el paso anterior como parámetros de consulta:

 http: // server-dev / oauth1 / authorize? oauth_token = <token_here> & oauth_token_secret = <secret_here> 

Autorizar conexión

Autorice la aplicación haciendo clic en el botón Autorizar . La siguiente pantalla presentará un token de verificación. Este token ahora actuará como un token oauth_verifier en el siguiente paso.

Una vez que el usuario ha autorizado al cliente, la aplicación aparecerá en la sección Aplicaciones autorizadas en la página Usuarios> Su perfil .

Intercambio de tokens

Al usar la opción OAuth 1.0 nuevamente en la pestaña Autorización , complete los campos de Clave del consumidor y Secreto del consumidor con los valores proporcionados por el consumidor. En los campos de Token y Token Secret, inserte los parámetros de valor oauth_token y oauth_token_secret (credenciales temporales).

Como también puedo pasar parámetros en la URL como parámetros de consulta, agregue el parámetro oauth_verifier a la URL de la siguiente manera:

 http: // servidor-dev / oauth1 / access? oauth_verifier = <oauth_verifier_value>

Con todos los parámetros en su lugar, envíe la solicitud haciendo clic en el botón Enviar . Si todo va bien, el servidor devolverá un código de estado 200 - OK junto con el cuerpo de respuesta que contiene los parámetros oauth_token y o auth_token_secret .

 oauth_token = <oauth_token_value> & oauth_token_secret = <oauth_secret_value>

En este punto, los tokens temporales adquiridos anteriormente se descartan y ya no se pueden usar.

Los nuevos parámetros oauth_token y oauth_token_secret son las credenciales de OAuth que puede usar en el cliente para generar solicitudes autenticadas.

Envío de una solicitud de prueba autenticada

Ahora que tengo las credenciales del token, enviaré una solicitud de prueba al servidor utilizando Postman. La solicitud requerirá los siguientes parámetros:

Deberá tener lo siguiente antes de comenzar:

  • oauth_consumer_key
  • oauth_consumer_secret
  • oauth_token
  • oauth_token_secret

Seleccione OAuth 1.0 en el menú desplegable de la pestaña Autorización en Postman.

Autorización

Una vez que haya completado todos los campos, haga clic en el botón Actualizar solicitud . Marque la opción Agregar parámetros al encabezado para enviar los parámetros en el encabezado de la solicitud en lugar de agregarlos a la cadena de consulta.

Si la solicitud tiene éxito, el servidor enviará un código de estado 200 - OK .

¡Terminando!

En este tutorial, discutí cómo configurar la API de autenticación OAuth para WordPress en un servidor y cómo usar el cliente HTTP para obtener credenciales de token. Si descubre un problema en el código o desea agregarlo a la discusión, deje un comentario a continuación.