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

HTML5

CSS3

SSO: LibOpenSSO

Integración con SSO

libopensso

Descargar versión 1.0.10
13 de enero de 2018

... o use Composer

La biblioteca libopensso es una reescritura de la biblioteca libopensso-php-legacy que permite integrar una aplicación en el SSO usando el protocolo OpenSSO, incluyendo algunas mejoras respecto a la versión antigua:

  • Orientación total a objetos
  • Funcionalidad interna y operaciones con el navegador separadas
  • Mejor control de errores. Uso de excepciones
  • Eliminación del fichero de configuración config.php
  • Disponibilidad como paquete de Composer, un gestor de dependencias para PHP

Requisitos

  • PHP 5.3.0 o superior
  • Soporte OpenSSL compilado en PHP

Instalación como paquete de Composer (opcional y recomendado)

Nota: se recomienda el uso de este método de instalación por la facilidad de actualización y de uso que supone

La instalación requiere acceso a la máquina. Ejecute la siguiente orden en el directorio raíz de su proyecto:

$ curl -s https://getcomposer.org/installer | php
 #!/usr/bin/env php
All settings correct for using Composer
Downloading...

Composer successfully installed to:
/home/jorge/miapp/composer.phar
Use it: php composer.phar

Verá un nuevo fichero llamado composer.phar. Es el ejecutable del gestor de dependencias. Añada una nueva dependencia para la biblioteca creando un fichero llamado composer.json con el siguiente contenido:

{
    "require": {
        "us/libopensso": "1.0.*"
    }
}

Ya sólo queda indicarle a Composer que quiere instalar las bibliotecas de las que depende su aplicación (en el ejemplo, solamente libopensso):

$ ./composer.phar install
Loading composer repositories with package information
Installing dependencies
  - Installing us/libopensso (1.0.8)
    Downloading: 100%

Writing lock file
Generating autoload files

Uso de la biblioteca

Puede leer la documentación técnica detallada.

Las llamadas a la biblioteca para comprobar la autenticación y para forzarla deberán hacerse antes de que se produzca cualquier salida (texto, código HTML, etc).

En toda aplicación que haga uso de la biblioteca deberá cargar todas las clases de la misma y proceder a crear un objeto de manejo de usuarios en el SSO.

Si instaló la biblioteca como paquete Composer, puede cargar la biblioteca de la siguiente manera:

<?php
require_once('vendor/autoload.php');

Si instaló la biblioteca como tar.gz, deberá cargar las clases como sigue:

<?php
require_once('libopensso-php/lib/US/OpenSSO/InternalHandler.php');
require_once('libopensso-php/lib/US/OpenSSO/User.php');

La instanciación del objeto es sencilla:

<?php
$u = new \US\OpenSSO\User('sso.us.es_002');

El primer argumento del constructor indica el entorno con el que trabajará la biblioteca.

Entornos disponibles

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

Operaciones más comunes

Comprobar si el usuario actual está autenticado es muy sencillo:

<?php
if ($u->isAuthenticated()) {
  echo "Autenticado";
} else {
  echo "No autenticado";
}

E incluso puede forzar la autenticación:

<?php
// Produce una redirección a la URL actual 
// en caso de no estar autenticado
// Se puede indicar una URL como parámetro
if ($u->enforceAuthentication()) {
  echo "Esto no ha hecho nada, el usuario ya está autenticado";
}

Una vez autenticado un usuario, puede leer cualquier atributo accediendo directamente al objeto como si el atributo fuera propio del mismo. Por ejemplo, puede leer el valor del atributo uid de la siguiente manera:

<?php
if ($u->isAuthenticated()) {
  echo "Su uid es " . $u->uid;
}

Los atributos multivaluados pueden devolver un array en lugar de una cadena. Si quiere recoger el valor (o valores) de un atributo usando un array aunque sea un valor sencillo, utilice el método attributeAsArray:

<?php
if ($u->isAuthenticated()) {
  $usesrelacion = $u->attributeAsArray('usesrelacion');
  var_export($usesrelacion);
}

Por último, si quiere hacer que el usuario cierre su sesión puede usar el método logout, que también acepta una URL como parámetro:

<?php
$u->logout('https://miaplicacion.us.es/fin');