Dentro de Sirope, el entorno de OAuth2 del SIR, hemos desarrollado un sistema basado en servicios web que permite acceder a los recursos ofrecidos por RedIRIS.
Actualmente los recursos que se pueden obtener son los relacionados con el estado de los proveedores de servicio: datos de monitorización, gráficos que representan el tráfico soportado por el mismo, etc.
En este post os vamos a comentar cómo desde tu organización conectarte a Sirope para obtener los recursos comentados anteriormente.
Paso 1: Instalación de la aplicación cliente:
El primer paso a realizar será bajar el paquete alojado en la forja de RedIRIS donde se encuentra el código y configuraciones básicas para instalar una aplicación cliente.
En este paquete encontraremos los siguientes elementos:
- Directorio config donde se encuentra el archivo de configuración de la aplicación cliente, clientConfig.xml
- Directorio src donde está el código que permite a la aplicación cliente obtener los recursos
- Archivo index.php que contiene una prueba de concepto que permite ver el funcionamiento de la librería
Para poder ejecutar el archivo index.php de prueba, deberás alojarlo en un servidor con el único requisito de tener instalado PHP 5. El código de la librería (directorio src) puede alojarse en el directorio de librerías para PHP de tu sistema o en el mismo lugar donde esté el index.php.
Paso 2: Configuración de PAPI
Para poder realizar una petición a este servicio será necesario aportar una aserción de un usuario, por lo que es necesario tener un sistema de autenticación como un PHPPoA2 disponible en el sistema.
Para poder obtener una aserción mediante esta herramienta será necesario que en el archivo index.php se modifique lo siguente:
//Incluir el archivo PoA.php del PHPPoA2 instalado en tu sistema
include("PoA.php");
//Instanciar un Punto de Acceso
$poa = new PoA("miaplicacion");
//Autenticar al usuario
$auth = $poa->authenticate();
//Obtener una aserción que le represente
if ($auth) { // usuario autenticado
$userdata = $poa->getAttributes();
} else {
// ocurrió un error y el usuario no está autenticado
}
Paso 3: Primeras pruebas con index.php
Una vez configurado el punto de acceso adecuadamente, se deberá obtener al ejecutar el index.php el siguiente mensaje: . En el caso de que obtengas otro tipo de mensaje, asegúrate de haber configurado adecuadamente tu instalación de PAPI. Si sigues teniendo problemas, ponte en contacto con nosotros
Paso 4: Obtener nombre usuario y clave definitivos
Para poder acceder a los recursos anteriormente descritos será necesario tener un nombre de usuario y clave dada por nosotros, para ello ponte en contacto con nosotros, comentándonos a qué institución perteneces.
Paso 5: Acceso a recursos
En el código de tu aplicación, deberás crear un objeto OAuth.
$client = new OAuth($dir);
Donde
$dir será la ruta absoluta al directorio donde está localizado el archivo de configuración
clientConfig.xml. Por ejemplo:
$client = new OAuth(dirname(__FILE__)."/own_config/");
Nota: La ruta que tiene el sistema puesta por defecto es la carpeta ‘config’ que podemos encontrar en el código descargado.
Una vez creado indicaremos el scope o recurso al que queremos acceder de los que tenemos disponibles:
- OAUTH_STATUS_SCOPE: con este scope es posible obtener información de monitorización de un proveedor de identidad concreto (rendimiento, último estado estable, etc.). Para ello será necesario enviar junto al url del scope el sHO del usuario que está accediendo al sistema. Solo podrán ver la información relativa a su proveedor de identidad las personas que pertenezcan a la misma institución del mismo. Para indicar un recurso tendremos que hacer la siguiente llamada:
$client->setScope(OAUTH_STATUS_SCOPE."?sho=".$sHO);
El resultado de esta petición será un objeto json, mediante la cual se representa un array con atributos asociados al proveedor de servicio sobre el que se realiza la petición.
- OAUTH_GRAPHS_SCOPE: este scope permite obtener los gráficos correspondientes al tráfico de un proveedor de servicio. Para poder acceder a esta gráfica será necesario establecer un scope tal y como el que podemos ver en el ejemplo:
$client->setScope(OAUTH_GRAPHS_SCOPE."?sho=".$sHO."&period=".$period."
&idp=".$idp."&geom=".$geom);
Donde:
- $sHO es el schacHomeOrganization del usuario que entra en la aplicación
- $period será una cadena con cualquiera de los valores ‘dayly’, ‘weekly’, ‘monthly’ o ‘yearly’
- $idp será el identificador del idp de la organización en cuestión, por ejemplo «AESIR»
- $geom será el tamaño de la gráfica, con formato anchura x altura, por ejemplo: «650×150»
El resultado de esta petición será un objeto json, mediante la cual se representará un array con campo ‘data’ que a su vez tienen dos elementos: ‘mime’, que tendrá el tipo mime de la imagen y ‘image’, donde estará la imagen representada en caracteres. Para mostrar esta imagen, será necesario realizar lo siguiente en el código de la aplicación que esté desarrollándose:
$result = json_decode($content, true);
$image = $result['data']['image'];
header("Content-Type: ".$result['data']['mime']);
echo base64_decode($image);
- OAUTH_CHARTS_SCOPE: este scope permite obtener las tablas numéricas correspondientes al tráfico de un proveedor de servicio. Para poder acceder a esta tabla será necesario establecer un scope tal y como el que podemos ver en el ejemplo:
$client->setScope(OAUTH_CHARTS_SCOPE."?sho=".$sHO."&period=".$period."
&idp=".$idp."&geom=".$geom);
Donde:
- $sHO es el schacHomeOrganization del usuario que entra en la aplicación
- $period será una cadena con cualquiera de los valores ‘dayly’, ‘weekly’, ‘monthly’ o ‘yearly’
- $idp será el identificador del idp de la organización en cuestión, por ejemplo «AESIR»
- $geom será el tamaño de la gráfica, con formato anchura x altura, por ejemplo: «650×150»
La respuesta que se recibe de este servicio es un objeto json que representa un array con la siguiente estructura:
- Array[data] = Array(
- ‘date’: fecha relacionada con la información obtenida
- ‘series’: array con
- ‘type’: tipo del gráfico, por ejemplo: «pie»
- ‘name’: nombre del IdP asociado a la información
- ‘series’: array con las etiquetas y datos numéricos asociados a una representación gráfica del tipo indicado en ‘type’
Por último, para obtener el recurso se realiza la llamada a la función doOAuthFlow($assertion), pasándole la aserción en forma de cadena. Por ejemplo, para una instalación de PHPPoA se realizaría lo siguiente:
$res = $client->doOAuthFlow($userdata['PAPIAssertion']);
if (!$res) {
echo $client->getResource();
}
Donde $client->getResource(); obtendrá el recurso en cuestión, el cual será un objeto json con el formato indicado anteriormente para cada scope.