Servicio de Informática y Comunicaciones - Universidad de SevillaUniversidad de SevillaSIC

HTML5

CSS3

SSO: LibOpenSSO-Legacy

Integración con SSO

libopensso-php (legacy)

Nota: se recomienda NO usar esta versión y utilizar en su lugar la nueva biblioteca libopensso.Use esta únicamente si su sistema tiene una versión de PHP anterior a la 5.3

 

Descargar versión 0.5.0
13 de enero de 2018

La biblioteca libopensso-php ha sido concebida para facilitar la integración de aplicaciones en el sistema OpenSSO usando PHP. El código de la biblioteca está disponible en la página de desarrollos para integrar aplicaciones en OpenSSO.

Requisitos

  • PHP5 o superior
  • Soporte OpenSSL en PHP

API y funcionamiento

Para usar libopensso-php únicamente hay que incluir el fichero OpenSSO.php, que define una clase con el mismo nombre y los métodos que se describen a continuación.

function OpenSSO($fetch_cookie_name = FALSE)

Construye el objeto para trabajar con OpenSSO.

Parámetros

  • $fetch_cookie_name obligar a la biblioteca a consultar a OpenSSO el nombre de la cookie

     

function check_error()

Devuelve el último error aparecido, o FALSE si no lo ha habido.

function check_sso()

Comprueba si un usuario tiene una sesión válida en OpenSSO. Si no tiene la cookie correspondiente o el token no está validado por OpenSSO, devuelve FALSE. Si por el contrario es válido, se recogen de OpenSSO los atributos relativos al usuario.

function check_and_force_sso($gotourl = '')

Comprueba que un usuario tenga una sesión activa en OpenSSO, y si no a tiene, es redirigido a la página de login de OpenSSO y devuelve FALSE. En caso contrario, devuelve TRUE.

Parámetros

  • $gotourl indica a OpenSSO a qué página debe devolver el control una vez autenticado el usuario. Si no se especifica, se usará la página actual (hallada mediante la función current_url()

     

function fetch_attributes()

Carga los atributos de un usuario de OpenSSO. Esta tarea la lleva a cabo automáticamente la biblioteca, pero se puede forzar el refresco de los atributos.

function attribute($atr, $force_array = FALSE)

Devuelve el valor de un atributo dado para el usuario actual. Si el atributo es multivaluado se devuelve un array con tantas componentes como valores tenga el atributo. Si se pasa como segundo argumento TRUE siempre se devuelve un array (en los casos de un solo valor y atributo vacío).

Si el usuario no tiene el atributo definido, devuelve una cadena vacía.

Parámetros

  • $atr atributo que se desea leer

     

  • $force_array forzar el uso de arrays en los casos en que no sea necesario (atributos con un solo valor y vacíos)

     

function all_attributes($force_arrays = FALSE)

Devuelve un array con todos los atributos del usuario actual.

Parámetros

  • $force_arrays Devolver valores simples de atributos dentro de un array en lugar de devolverlos directamente asociados al nombre del atributo.

function logout($gotourl = '')

Cierra la sesión del usuario actual en OpenSSO.

Parámetros

  • $gotourl URL a la que la página de logout de OpenSSO debe devolver al usuario. Si está vacía, se calcula según la función current_url().

Configuración

Desde la versión 0.3 se configura la biblioteca mediante paquetes de configuración, entregándose uno por cada entorno. En el fichero config.php será necesario especificar el paquete de configuración que se desee utilizar. Cada pack incluye un conjunto de URLs definidas y los parámetros de validación de los certificados.

Por defecto la biblioteca usa el entorno de preproducción. Tiene disponibles los siguientes paquetes:

  • ssopre.us.es_002: entorno de preproducción (ssopre.us.es). Por defecto
  • sso.us.es_002: entorno de producción (sso.us.es)

Algunos ejemplos

Comprobación simple de sesión

<?php
include('../OpenSSO.php');

$o = new OpenSSO();
$res1 = $o->check_sso();

echo "<h1>check_sso()</h1->";
echo "<pre>";
var_dump($res1);

echo "\nErr? : " . $o->check_error();
echo "</pre>";

if ($res1 === TRUE) {
    echo '<pre>';
    $class = $o->attribute('UsEsRelacion');
    var_dump($class);
    echo '</pre>';
}

Forzado de inicio de sesión

<?php
include('../OpenSSO.php');

$o = new OpenSSO();
$res1 = $o->check_and_force_sso();

echo "<h1>check_and_forcesso()</h1>";
echo "<pre>";
var_dump($res1);

echo "\nErr? : " . $o->check_error();
echo "</pre>";

Ejemplo complejo

<?php
require_once('libopensso-php/OpenSSO.php');

// Obtiene el nombre de la cookie del servicio web
$o = new OpenSSO(TRUE);

$accion = isset($_GET['accion']) ? $_GET['accion'] : '';

if ($accion == 'login') {
    $auth = $o->check_and_force_sso();
} elseif ($accion == 'logout') {
    $o->logout(TRUE, 'https://www.us.es');
} else {
    $auth = $o->check_sso();
}


if (!$auth) {
    $nombre = 'Anónimo';
    $sexo = 1;
} else {
    $nombre = $o->attribute('cn') . ' <tt><' . $o->attribute('mail') 
        .  '></tt>';
    $sexo = $o->attribute('schacGender');
}


$saludo = 'Bienvenid' . ($sexo == 1 ? 'o' : 'a');
?>

<h1><?php echo $saludo?></h1>

<p>Hola, <?php echo $nombre ?></p>

<?php
if ($auth) {
    echo '<a href="?accion=logout">Salir</a>';
} else {
    echo '<a href="?accion=login">Entrar</a>';
}

Posibles problemas

  • Algo no va bien...
    Asegúrate de aceptar cookies en el navegador y de haber configurado correctamente el fichero config.php. También es muy importante que el servidor tenga conectividad con el puerto 443 de opensso.us.es.
  • get_error() me dice que ha habido un código HTTP 403
    Asegúrate de haber pedido permiso para que la IP del servidor consulte a los servicios web. Véase Soporte.