Configurar autenticación WP desde una API externa

31 may 2017, 12:39:54
Vistas: 20.9K
Votos: 9

Existe un sitio externo no-WordPress y necesito que sus usuarios puedan iniciar sesión en mi nuevo sitio WordPress usando las mismas credenciales que ya tienen.

Me han proporcionado un endpoint (www.example-api.com/token) y credenciales de inicio de sesión (email y contraseña) que devuelve un token (y otros detalles) como respuesta.

He estado leyendo sobre OAuth y la mayoría de los recursos que encuentro son para problemas inversos (es decir, iniciar sesión en un sitio no-WordPress usando sus credenciales del sitio WordPress). No tengo acceso al otro sitio y veo que necesita configuración allí, entonces, ¿debería descartar esta opción?

Me he encontrado con la posibilidad de sobrescribir wp_authenticate a través de un plugin personalizado, que ya he configurado, pero estoy atascado en qué y CÓMO hacer esto realmente.

¿Alguna guía o ayuda para esto?

2
Comentarios

Actualmente no veo ninguna forma factible de hacer esto sin una puerta de enlace desde el sitio que no es de WP. De lo contrario: ¿dónde tendrías que confirmar que las credenciales enviadas por los usuarios desde el sitio no-WP son verdaderamente correctas y corresponden a un usuario determinado? ¡Espero que lo entiendas!

nyedidikeke nyedidikeke
31 may 2017 14:17:35

Creo que no me expliqué lo suficientemente claro: tenía acceso a un endpoint y también a algunos datos de prueba para la dirección de correo electrónico y la contraseña de las cuentas que necesitaba. Sin embargo, lo logré, lo publicaré. ¡Gracias por tu ayuda! :)

Suika Suika
5 jun 2017 12:58:54
Todas las respuestas a la pregunta 1
9
12

Actualización: Hice una publicación en el blog para explicar esto mejor :)


Logré hacer esto usando el filtro authenticate de WP dentro de un nuevo plugin; gran parte guiado por este tutorial de Ben Lobaugh. Puntos principales del plugin:

  • Crear una función de llamada API usando cURL (puedes obtener códigos guía desde Postman al probar si no lo sabes ya).
  • Añadir un filtro verificando si la respuesta de la llamada indica que el usuario existe y tiene acceso (basado en el rol del usuario en mi caso).
  • Seguir usando el filtro, verificar si el usuario ya tiene una cuenta en el sitio WP – si no, crear una para ellos usando wp_insert_user. Para aclarar, usé el correo y contraseña verificados por la API porque WP requiere un usuario registrado en su base de datos.
  • Si el usuario ya existe en la base de datos WP, asegurarse de que sus credenciales sean las mismas usando wp_update_user. Esto es para casos como cuando cambiaron sus detalles en el sitio principal que no es WP.
  • Opcionalmente, añadir una página de ajustes para el plugin. En mi caso, creé un campo para la URL de solicitud siguiendo este tutorial de Bharat Pareek.
6 jun 2017 05:32:41
Comentarios

así que has implementado una especie de SSO (Inicio de Sesión Único) que realmente es la única forma de hacerlo. Pero el "si el usuario no existe, crear una cuenta" suena muy incorrecto. Cualquier ataque de fuerza bruta a cierta escala podría derribar tu WordPress

Mark Kaplun Mark Kaplun
6 jun 2017 05:49:52

¿Puedes explicarlo más a fondo? Tenía la impresión de que debía crearles un usuario local de WordPress ya que la guía que seguí (primer enlace) decía específicamente "WordPress requiere que un usuario real (usuario de WordPress) esté presente en la base de datos de WordPress para realizar operaciones con ese usuario".

Creo un nuevo usuario solo si la respuesta lo indica, y los registro también usando su correo electrónico y contraseña de la API.

Suika Suika
6 jun 2017 06:00:32

tal vez es solo algo en tu descripción, o mi malentendido, pero suena como si crearas un usuario por cada solicitud de "verificación".

Mark Kaplun Mark Kaplun
6 jun 2017 07:43:09

ah, creo que lo entiendo... autenticas a los usuarios de WordPress contra el otro sitio. en ese caso sí, tu lógica es correcta

Mark Kaplun Mark Kaplun
6 jun 2017 07:46:24

Ya veo. Sí, probablemente sea la redacción. Lo editaré para que quede más claro. ¡Gracias!

Suika Suika
6 jun 2017 09:06:50

El enlace del blog está devolviendo un error 404

M.Babcock M.Babcock
25 ene 2019 00:59:11

¡Arreglé el enlace del blog! :)

Suika Suika
14 mar 2019 09:08:59

¡Gracias! Estoy pensando en usar este enfoque. ¿Cómo manejas cuando un usuario cambia la contraseña en la aplicación que no es de WP? ¿Simplemente usas la API REST de WP para actualizarla?

Kevin Amorim Kevin Amorim
9 dic 2020 11:53:00

Sí, así es como lo manejé, ya que el auth en el sitio que no es de WP es el único lugar donde pueden actualizar la contraseña de todos modos. ¡Buena suerte! :)

Suika Suika
10 dic 2020 16:08:25
Mostrar los 4 comentarios restantes