Proceso de autenticación (versión 0.6)

SDK del directorio de aplicaciones

Proceso de autenticación (versión 0.6; obsoleta)

La mayoría de las aplicaciones tienen como fin proporcionar contenido específico para los usuarios y capacidades de interacción. Antes de implementar la autenticación, su aplicación será independiente del usuario de Hootsuite que la esté utilizando. En esta página se describen técnicas para autenticar usuarios de Hootsuite con su aplicación.

Tenga en cuenta que estas técnicas NO proporcionan métodos para realizar el proceso de autenticación con proveedores de servicios externos. Es su responsabilidad configurar la autenticación con proveedores externos mediante el uso de los métodos de autenticación que estos admitan.

Para decidir qué tipo de autenticación se adecúa a sus necesidades, tenga en cuenta las siguientes características:

  • El método de inicio de sesión único, gracias a que proporciona un ID de usuario, indica a una columna de la aplicación qué usuario de Hootsuite la está visualizando. Con la ayuda de un valor hash (token de seguridad), se evita la suplantación de dicho ID de usuario, con lo que se autentica la solicitud.
  • El método OAuth funciona de la misma forma que el de inicio de sesión único, solo que, en lugar de transmitir un ID de usuario y un valor hash, se transfiere un ID de sesión (token de sesión) negociado previamente entre Hootsuite y la aplicación. Además, durante la instalación de la aplicación se exige al usuario que inicie sesión en una cuenta que consta en su propia base de usuarios y usted tendrá que almacenar el ID de cuenta de dicho usuario (para que coincida con el token de sesión cuando se visualicen las columnas). De este modo, el ID de cuenta introducido se asocia con la instalación de la aplicación.

Por consiguiente, el método OAuth resulta útil si desea conectar un usuario de su propia base de usuarios con la aplicación, pero también exige al usuario que instale la aplicación varias veces si desean conectar varias cuentas. Llamemos a esta particularidad "autenticación por aplicación".

Naturalmente, también puede decidir que el usuario inicie sesión en otra cuenta de usuario y usted asociar dicha cuenta con la aplicación de forma manual empleando el método de autenticación de inicio de sesión único. La decisión de conectar cuentas de usuario de esta forma dependerá exclusivamente de usted. Puede ofrecer conectar las cuentas de su propia base de usuarios o implementar la autenticación con un proveedor de servicios externos (empleando los métodos de autenticación que estos admitan). Con independencia de lo que decida, llamaremos a estas cuentas "cuentas de terceros" para facilitar la lectura de este documento. Ahora, tenga en consideración esta particularidad: Si asociase una cuenta de terceros con la aplicación utilizando la autenticación por aplicación de forma similar a la característica de OAuth descrita anteriormente, es posible que se produzcan errores debido a que un usuario puede agregar columnas a la aplicación varias veces, así que a usted le sería imposible reflejar el estado de autenticación actual en cada una de las columnas cuando un usuario haya completado el proceso de desautenticación de su cuenta de terceros en una de las columnas. Por tanto, en lugar de hacerlo de esta forma, lo que se recomienda normalmente es asociar una cuenta de terceros con una sola columna. Llamemos a esta particularidad "autenticación por columna".

Este tipo de autenticación de cuentas de terceros por columna también tiene la ventaja de que los usuarios pueden conectar varias cuentas al mismo tiempo (cada una con su propia columna) sin requerir que la aplicación se instale varias veces.

Uno de los parámetros de URL transmitidos a las columnas constituye el ID de ubicación (PID) de la columna. Este identificador es único para cada columna que ha agregado un usuario y resulta útil a la hora de implementar la autenticación por columna de una cuenta de terceros.

Inicio de sesión único

Se aplica un algoritmo hash con cifrado SHA-1 a un identificador de usuario, a una marca de tiempo y a una clave secreta (Salt) compartidos entre Hootsuite y el desarrollador. A continuación, se transmiten a la aplicación. El desarrollador de la aplicación puede volver a calcular el hash de verificación y compararlo con el que se transmitió. Si coinciden, puede considerarse que el usuario al que hace referencia el identificador ha iniciado sesión.

Al emplear este método, un tercero no podrá suplantar un hash de verificación si no conoce la clave secreta compartida. No obstante, este método es vulnerable a ataques de reproducción si un atacante es capaz de interceptar el tráfico de red sin cifrar y visualizar la cadena de consulta. Esto puede evitarse utilizando el protocolo HTTPS y comprobando que la marca de tiempo sea reciente.

De forma predeterminada, el identificador de usuario suministrado constituye un ID único que está ligado a la cuenta de Hootsuite del usuario. También puede dejar que el usuario introduzca un identificador (una dirección de correo electrónico, un nombre de usuario, etc.) para luego transmitirlo a la aplicación. Sin embargo, esta alternativa solo debería utilizarse si los datos que muestra la aplicación son de carácter público, ya que cualquier usuario podría introducir la dirección de correo electrónico de otra persona.

URL de muestra:

https://app.somewhere.com?i=1667985&ts=1310681657&token=231a3fb74139c74c37e9111ceb59ce02a349ef88

La aplicación validaría estos parámetros de la siguiente forma:

$secret = 'sharedSecretABCD1234'; // defined in App configuration at hootsuite.com/developers
$user_id   = $_REQUEST['i'];
$timestamp = $_REQUEST['ts'];
$token     = $_REQUEST['token'];
if (sha1($user_id . $timestamp . $secret) == $token)
{
    echo "Inicio de sesión realizado correctamente.";
}

Parámetros de URL transmitidos al marco flotante de la columna de aplicaciones:

lang=en
timezone=7200
pid=2823         // placement ID, unique for each stream per user
uid=1234567      // Hootsuite user ID
i=1234567        // user identifier (optionally entered by user upon App installation)
ts=1318362023    // timestamp
token=123abc...  // security token (sha1 hash)

OAuth

Para configurar el método de autenticación OAuth se requieren amplios conocimientos de su arquitectura, ya que hay que implementar un extremo de proveedor de servicios de acuerdo con las especificaciones de OAuth, tal y como se describe en el siguiente diagrama de flujo. Aunque la configuración de este método lleva más tiempo que la autenticación de inicio de sesión único, ofrece, entre otras principales ventajas, mayor seguridad y una experiencia de usuario más eficaz, ya que se pide al usuario que inicie sesión en la aplicación cuando la instale.

Hootsuite utiliza una implementación OAuth estándar, aunque emplea un paso adicional en el que recupera un ID de sesión del extremo de autenticación de la aplicación (utilizando un método de recuperación con autenticación OAuth). Tendrá que implementar este extremo de autenticación además del de proveedor de servicios OAuth.

En el siguiente diagrama de flujo se describe el procedimiento de autenticación desde el proceso de autenticación OAuth estándar que se inicia cuando un usuario instala la aplicación (mediante la validación del token de acceso por medio del extremo de autenticación hasta el momento en que el usuario inicia sesión en la aplicación.

hsOauth.45b015e3

Extremo de autenticación

La primera vez que se abre una columna de aplicaciones, no se transmiten tokens de sesión debido a que Hootsuite no tiene ninguno almacenado. En ese punto, la aplicación debe realizar una llamada a hsp.startAppTokenAuth() para que Hootsuite solicite un token de sesión al extremo de autenticación de la aplicación. Una vez que Hootsuite haya recibido el token, vuelve a cargar la columna de aplicaciones, solo que esta vez transmite dicho token que, a su vez, la aplicación valida. Si es el mismo que el que proporcionó el extremo de autenticación, es seguro considerar al usuario como autenticado.

Otra manera de plantear este proceso es que en el paso de intercambio de tokens se utilice OAuth para que un usuario inicie sesión en el sitio. Usted generará un ID de sesión de la misma forma que lo haría para otro proceso de inicio de sesión de usuarios, solo que lo transmitirá a Hootsuite, que puede enviarlo cuando la aplicación se carga con el fin de identificar el usuario que tiene iniciada la sesión en este momento.

Analicemos esto de forma más detallada:

  • El usuario de Hootsuite carga la columna de aplicaciones, la aplicación se carga desde el servidor del proveedor de la aplicación y no se transmite ninguna credencial de autenticación.
  • La aplicación advierte que no hay ninguna sesión de usuario y que no se han transmitido credenciales de autenticación, muestra un mensaje de que se está iniciando sesión y realiza una llamada a la función JavaScript hsp.startAppTokenAuth(), que iniciará un intercambio de tokens de sesión.
  • Se realiza una solicitud desde el sistema back-end de los servidores de Hootsuite al extremo de autenticación de la aplicación, que comprueba los tokens OAuth y devuelve un ID de sesión.
  • El marco flotante de la aplicación se vuelve a cargar, solo que esta vez transmite el ID de sesión. La aplicación valida el ID de sesión y lo utiliza para iniciar una sesión de usuario.

Hootsuite seguirá transmitiendo el token de sesión almacenado cada vez que se carga una columna de aplicaciones. El desarrollador de aplicaciones tendrá que decidir el tiempo durante el cual será válido un token de sesión. Si la aplicación considera que ha expirado una sesión o no es válida, debe volverse a realizar una llamada a la función hsp.startAppTokenAuth() para iniciar la creación de un nuevo token de sesión.

Validación del token de acceso

El extremo de autenticación de la aplicación debe validar un token de acceso, tal y como se describe en las especificaciones de OAuth, así como devolver una cadena con codificación JSON que contenga un parámetro session_token:

echo json_encode(array('result'=>'success', 'session_token'=>'abcd1234'));

{"result":"success","session_token":"abcd1234"}

O si un token no se ha podido validar:

{"result":"fail","reason":"Algún mensaje de error"}

Si las credenciales que se transmiten al extremo de autenticación no son válidas, es posible que la aplicación pida a Hootsuite que abra el cuadro de diálogo de edición de aplicaciones del usuario mediante una llamada a la función hsp.editAppAuth(), que permite que el usuario de Hootsuite introduzca nuevas credenciales o reinicie el proceso de autenticación OAuth.

Si desea ver una lista de vínculos a implementaciones OAuth en varios idiomas (muchas de las cuales incluyen código que puede utilizarse para crear un proveedor de autenticación OAuth), consulte http://oauth.net/code/.