Configurar autenticación WP desde una API externa
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?

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.

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

¿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.

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".

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

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

¡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?
