Utilisation des Web Services (modules SOAP)

Pré-requis

Le module Perl SOAP::Lite doit être installé sur le système.
# apt-get install libsoap-lite-perl
# yum install perl-SOAP-Lite

Web Service pour l'accès aux sessions

Présentation



Ce Web Service permet au portail (Lemonldap::NG::Portal) et au handler (Lemonldap::NG::Handler) d'accéder en lecture et en écriture aux sessions WebSSO. Cela permet par exemple à un handler d'aller récupérer les sessions à distance avec une simple requête SOAP (sur HTTP). Pour des architectures plus complexes, cela permet également de disposer de plusieurs portails qui enregistrent les sessions à distance.

DIA-Fonctionnement_LemonLDAP::NG_SOAP_Sessions-1.png

Installation du script serveur SOAP



Au niveau du serveur principal, c'est-à-dire celui qui stocke les sessions, le script suivant doit être installé, par exemple dans /var/www/lemonldapng/soap/sessions.pl :

#! /usr/bin/perl

use Lemonldap::NG::Manager::SOAPServer;

Lemonldap::NG::Manager::SOAPServer->start ( realSessionStorage => "Apache::Session::File", realSessionStorageOptions => { Directory => "/tmp", }, type => "sessions", AuthorizedFunctions => "new get set delete", );

Les paramètres de l'objet SOAPServer sont les suivants : Un handler n'a besoin que de lire des sessions (fonction "get"), par contre un portail devra les écrire (fonctions "new", "set" et "delete").

On peut donc utiliser toutes les méthodes de stockage de sessions, comme par exemple MySQL :

#! /usr/bin/perl

use Lemonldap::NG::Manager::SOAPServer;

Lemonldap::NG::Manager::SOAPServer->start ( realSessionStorage => "Apache::Session::MySQL", realSessionStorageOptions => { DataSource => "DBI:mysql:database=lemonldapng;host=127.0.0.1", UserName => "ssoadmin", Password => "ssopasswd", LockDataSource => "DBI:mysql:database=lemonldapng;host=127.0.0.1", LockUserName => "ssoadmin", LockPassword => "ssopasswd", }, type => "sessions", AuthorizedFunctions => "new get set delete", );

Configuration Apache

L'accès au script SOAP doit être autorisé par Apache, par exemple :

Alias /soap /var/www/lemonldapng/soap

<Files ~ ".(pl)$"> SetHandler perl-script PerlHandler ModPerl::Registry PerlSendHeader On </Files>

<Directory /var/www/lemonldapng/soap> AllowOverride None Options +ExecCGI +FollowSymLinks -Indexes </Directory>

Cette configuration est généralement ajoutée au fichier de configuration Apache du portail et du manager.

L'accès au script SOAP peut être protégé des différentes manières : Voir les documentations des modules SOAP::Lite et SOAP::Transport pour plus d'informations sur ces sujets.

Configuration d'un handler

Le handler effectue une requête SOAP pour lire les informations de sessions, en fournissant l'identifiant de sessions retrouvé dans le cookie fourni par le navigateur de l'utilisateur.

La configuration SOAP est effectué au niveau de la fonction init() du module, en surchargeant les paramètres de configuration globalStorage et globalStorageOptions :

package Handler;

use strict ; use Lemonldap::NG::Handler::SharedConf qw(:all) ;

our $VERSION = '0.01' ; our @ISA = qw(Lemonldap::NG::Handler::SharedConf) ;

*EXPORT_TAGS = *Lemonldap::NG::Handler::SharedConf::EXPORT_TAGS ; *EXPORT_OK = *Lemonldap::NG::Handler::SharedConf::EXPORT_OK ; *EXPORT = *Lemonldap::NG::Handler::SharedConf::EXPORT ;

PACKAGE->init ({ globalStorage => "Lemonldap::NG::Manager::Apache::Session::SOAP", globalStorageOptions => { proxy => "http://websso.mydomain.com/soap/sessions.pl", proxyOptions => { timeout => "5", }, }, configStorage => { type => "DBI", dbiChain => "DBI:mysql:database=lemonldapng;host=127.0.0.1", dbiUser => "ssoadmin", dbiPassword => "ssopasswd", dbiTable => "lmConfig", },

localStorage => "Cache::FileCache", localStorageOptions => {}, https => "0", }) ;

1;

Configuration d'un portail

Pour le portail, on procède de la même manière :

#!/usr/bin/perl

use Lemonldap::NG::Portal::SharedConf;

my $portal = Lemonldap::NG::Portal::SharedConf->new( globalStorage => "Lemonldap::NG::Manager::Apache::Session::SOAP", globalStorageOptions => { proxy => "http://websso.mydomain.com/soap/sessions.pl", proxyOptions => { timeout => "5", }, }, configStorage => { type => "DBI", dbiChain => "DBI:mysql:database=lemonldapng;host=127.0.0.1", dbiUser => "ssoadmin", dbiPassword => "ssopasswd", dbiTable => "lmConfig",}, ); ...

Configuration à travers le Manager

Il est possible d'éviter de surcharger les paramètres de configuration dans le portail et le handler en agissant directement sur la configuration des sessions au niveau du Manager.

Pour cela, il suffit de se rendre dans la partie "Stockage des Sessions" puis de remplir correctement les paramètres : Attention cependant, en activant cette configuration, tous les éléments du WebSSO passeront par SOAP pour lire et écrire les sessions.

Web Service pour l'accès à la configuration

Présentation

Ce Web Service permet au portail (Lemonldap::NG::Portal), au manager (Lemonldap::NG::Manager) et au handler (Lemonldap::NG::Handler) d'accéder en lecture et en écriture à la configuration du WebSSO.

Installation du script serveur SOAP

Au niveau du serveur principal, c'est-à-dire celui qui stocke les sessions, le script suivant doit être installé, par exemple dans /var/www/lemonldapng/soap/config.pl :

#!/usr/bin/perl

use Lemonldap::NG::Manager::SOAPServer;

Lemonldap::NG::Manager::SOAPServer->start( configStorage => { type => 'DBI', dbiChain => "DBI:mysql:database=lemonldapng;host=127.0.0.1", dbiUser => "ssoadmin", dbiPassword => "ssopasswd", dbiTable => "lmConfig", } );

Tout comme pour le Web Service des sessions, il est possible d'utiliser d'autres type que "DBI" (par exemple "File").

Configuration Apache



Elle est identique à celle des sessions, si les scripts sessions.pl et config.pl sont bien dans le même répertoire :

Alias /soap /var/www/lemonldapng/soap

<Files ~ ".(pl)$"> SetHandler perl-script PerlHandler ModPerl::Registry PerlSendHeader On </Files>

<Directory /var/www/lemonldapng/soap> AllowOverride None Options +ExecCGI +FollowSymLinks -Indexes </Directory>

Configuration d'un handler, d'un portail ou d'un manager



Pour tous ces éléments, il suffit de remplacer le paramètre configStorage :

…
configStorage       => {
       type  => "SOAP",
       proxy => "http://websso.mydomain.com/soap/config.pl",
},
...

L'accès à la configuration se fera alors par SOAP.

Sécurisation des Web Services

HTTP-BASIC

Si le serveur SOAP est protégé par une authentification BASIC, le client (par exemple un handler) doit être paramétré ainsi :

package My::Package;

use base Lemonldap::NG::Handler::SharedConf;

PACKAGE->init ( { localStorage => "Cache::FileCache", localStorageOptions => { 'namespace' => 'MyNamespace', 'default_expires_in' => 600, }, configStorage => { type => 'SOAP', proxy => 'http://manager.example.com/soapserver.pl', User => 'http-user', Password => 'pass', }, https => 1, } );

SSL/TLS

Si le serveur SOAP requiert un certificat client, le client (par exemple un handler) doit être paramétré ainsi :

package My::Package;

use base Lemonldap::NG::Handler::SharedConf;

$ENV{HTTPS_CERT_FILE} = 'client-cert.pem'; $ENV{HTTPS_KEY_FILE} = 'client-key.pem';

__PACKAGE__->init ( { localStorage => "Cache::FileCache", localStorageOptions => { 'namespace' => 'MyNamespace', 'default_expires_in' => 600, }, configStorage => { type => 'SOAP', proxy => 'http://manager.example.com/soapserver.pl', }, https => 1, } );