Crear API para el inicio de sesión único con un sitio de terceros

12

Mi sitio necesita integrarse con un software de terceros, que vivirá en su propio subdominio, alojado por la compañía de software. Necesito proporcionar a los desarrolladores externos un punto final que puedan usar para realizar llamadas a la API (a mi sitio de wordpress) para permitir que los usuarios de mi sitio accedan al subdominio.

El otro sitio debe autenticar a los usuarios de mi sitio a través de algún tipo de API.

No estoy seguro de por dónde empezar, pero tengo la sensación de que esto ha sido resuelto por personas más inteligentes que yo. Gracias de antemano!

    
pregunta emersonthis 18.07.2012 - 19:42

1 respuesta

15

Problemas de secuencias de comandos entre sitios

No puede transferir cookies de autenticación WP entre dominios. Tampoco desea almacenar contraseñas de texto simple para iniciar sesión en otra instalación de WP mediante programación. Por lo tanto, tendrá que hacer que los usuarios inicien sesión en WordPress y luego accedan a su estado de inicio de sesión a través de un punto final de API desde el sitio de terceros. Esto permite a WordPress manejar toda la autenticación. Es bastante seguro ya que un usuario tendrá que iniciar sesión físicamente en el lado WP para que el punto final de la API proporcione los datos a terceros.

Crear un punto final de API

Echa un vistazo a este artículo que acabo de escribir aquí: enlace

También puede ver la demostración del código aquí: enlace

Tendrá que descubrir la lógica para sus propias necesidades de aplicación, pero esto le permitirá crear un punto final donde pueda servir todo lo que desee desde WordPress.

Ya que estás usando WordPress como el sitio de autenticación, puedes usar un cheque como is_user_logged_in (). Si han iniciado sesión, devuelva un objeto de usuario al tercero con la información que necesite.

Iniciar sesión desde un tercero

Desde el tercero, pueden vincularse a su página de inicio de sesión para una experiencia perfecta usando redirect_to query var. Una vez que haya iniciado sesión, los devolverá al sitio de terceros.

http://sub.yourdomain.com/wp-login.php?redirect_to=http%3A%2F%2Fwww.third-party-domain.com

Inicios de sesión remotos

Si necesita ingresar usuarios a WordPress desde un sitio de terceros, puede usar algunas funciones WP simples que se enumeran en este sitio: enlace

Definitivamente, necesitarás usar un secreto compartido y crear hashes basados en el tiempo de ese secreto para mantener las cosas seguras. Básicamente, esto es lo que se vería:

El tercero envía la solicitud con una marca de tiempo y un token generado por un secreto compartido:

$shared_secret = 'foobar'; //do not send this to the API endpoint
$timestamp = time();
$token = md5($shared_secret.$time_stamp);

La instalación de WordPress recibe la solicitud:

$shared_secret = 'foobar';
$timestamp = esc_attr($_GET['timestamp']);

if((time() - $timestamp) > 30) # Threshold is 30 seconds
    //do something here - TOKEN expired!

$token = md5($share_secret.$timestamp);
$token_to_check = esc_attr($_GET);

if($token == $token_to_check)
    //authenticated!
    
respondido por el Brian Fegter 18.07.2012 - 20:43

Lea otras preguntas en las etiquetas