Filtrage des données par application
EoleSSO implémente un mécanisme permettant de renvoyer des informations différentes concernant l'utilisateur en fonction de l'application qui émet la requête.
Ce mécanisme nécessite la mise en place de deux fichiers de configuration :
- un fichier de description de l'application. Ces fichiers doivent être mis dans le répertoire
/usr/share/sso/app_filters
et leur nom doit se terminer par_app.ini
. - un fichier de filtre (dans le même répertoire), devant se nommer
<nom_du_filtre>.ini
.
La description d'une application se fait selon le modèle suivant (exemple avec une application fictive) :
[editeurs]
# nom de l'application (indicatif)
port=80
# port de l'application (facultatif)
baseurl=/providers
# url de l'application
scheme=both
# type de protocole : http/https/both
addr=^appserv..*.fr$
# adresse des serveurs autorisés
typeaddr=regexp
# type d'adresse
filter=mon_filtre
# nom du filtre à appliquer
proxy=default
# proxy http nécessaire pour accéder à l'application
Si port
est spécifié, il devra apparaître dans l'URL du service désirant s'authentifier. Pour que la définition fonctionne quel que soit le port (ou si le port n'est pas dans l'URL), enlevez la ligne concernant le port, ou mettez port=
sans valeur
Il y a 2 types de vérification de l'adresse (typeaddr
) :
type ip : l'adresse donnée peut être une adresse IP ou un couple adresse/netmask.
Les formats d'écriture suivants sont possibles :
- 192.168.230.1
- 192.168.230.0/255.255.255.0
- 192.168.230.0/24
type regexp : l'adresse est donnée comme une expression régulière à comparer à l'adresse DNS du client.
Dans l'exemple : ^appserv..*.fr$ -> correspond à toutes les adresse du type par appserv.<qqe_chose>.fr
Ces données seront comparée avec l'URL associée à la session dans le serveur SSO (dans le cadre du protocole CAS, cette URL correspond au champ service donné lors de l'obtention d'un ticket d'application).
Truc & astuce
Pour vérifier le fonctionnement d'une regexp, lancer un shell python:
>>> import re
>>> regexp = '<votre regexp>'
>>> url = '<une url à comparer avec la regexp>
>>> print re.match(regexp, url) is not None
baseurl
correspond au chemin de l'application.
Dans l'exemple ci dessus, une URL du type http://appserv_test.fr:80/providers
sera reconnue (A noter que http://appserv_test.fr:80/providers/toto
est aussi considéré comme valide).
La partie requête de l'URL n'est pas prise en compte (dans cet exemple, http://appserv_test.fr:80/providers?variable=1&variable2=test
sera considérée valide).
Pour vérifier quelle URL est reçue, vous pouvez regarder dans /var/log/eole-sso.log. L'URL est affichée dans les lignes commençant par : adding session for service : ....
filter
indique le nom du fichier de filtre à utiliser (sans l'extension.ini) pour les applications correspondant à cette description. Voir la section suivante pour plus de détail.
proxy
indique que l'utilisation d'un proxy est nécessaire pour accéder à l'application depuis la machine hébergeant le serveur EoleSSO.
si la valeur est 'default
', le proxy déclaré dans la configuration (dans l'onglet general de gen_config) est utilisé. Il est aussi possible de spécifier un proxy particulier avec une valeur du type 'nom_hote:port
'. Le proxy déclaré sera utilisé dans les procédures suivantes :
envoi d'une requête de déconnexion CAS à une application
envoi d'un ticket PGT à un client CAS en mode proxy