Guide. Sommaire. Date. 7 juillet 2012. Version. Connexion. 3.1. Création d'une



Documents pareils
Guide d interfaçage SSO Connexion des ressources aux plates-formes de type Corrélyce. Sommaire. Titre du document

Aspects techniques : guide d interfaçage SSO

Documentation CAS à destination des éditeurs

Un exemple d'authentification sécurisée utilisant les outils du Web : CAS. P-F. Bonnefoi

A DESTINATION DES SERVICES TIERS. Editeurs d applications et ressources pédagogiques connectées à l ENT

Single Sign-On open source avec CAS (Central Authentication Service) Vincent Mathieu Pascal Aubry Julien Marchal

Authentification et contrôle d'accès dans les applications web

Service d'authentification LDAP et SSO avec CAS

Qu'est ce qu'une Fédération d'identités? Définitions Fonctionnement de base Fonctionnement détaillé Les principaux composants

Installation et configuration de Vulture Lundi 2 février 2009

CAS, la théorie. R. Ferrere, S. Layrisse

Introduction. aux architectures web. de Single Sign-On

Single Sign On. Nicolas Dewaele. Single Sign On. Page 1. et Web SSO

Single Sign-On open-source avec CAS (Central Authentication Service)

Espace Numérique de Travail

Présentation du relais HTTP Open Source Vulture. Arnaud Desmons Jérémie Jourdin

Single Sign-On open source avec CAS (Central Authentication Service)

Application de lecture de carte SESAM-Vitale Jeebop

Keyyo Guide de mise en service CTI / API / TAPI Keyyo

Authentification avec CAS sous PRONOTE.net Version du lundi 19 septembre 2011

Vérification intégrée de l'utilisateur Guide d'implémentation client Confidentiel Version 2.9

DESCRIPTION DU PLUGIN D AUTHENTIFICATION AVEC CAS POUR SPIP

AccessMaster PortalXpert

Tour d horizon des différents SSO disponibles

Les messages d erreur d'applidis Client

MANUEL D UTILISATION LIVRET DE L ENSEIGNANT

Mise en oeuvre d un intranet à partir de logiciels Open Source avec intégration des certificats numériques et login unique

Note Technique Sécurité. Système d'authentification. Authentification hors APN LuxGSM Authentification 3G/APN. Système de notification

LemonLDAP::NG / SAML2. Xavier GUIMARD (Gendarmerie Nationale) Clément OUDOT (Groupe LINAGORA)

DMZ... as Architecture des Systèmes d Information

L'AAA, késako? Bruno Bonfils, fr.org>, Novembre Sous ce terme d'apparence barbare est regroupé l'ensemble des concepts suivants :

Description de la maquette fonctionnelle. Nombre de pages :

Plateforme PAYZEN. Définition de Web-services

Manuel Utilisateur de l'installation du connecteur Pronote à l'ent

FileSender par RENATER - Guide utilisateur

Dossier Technique. Détail des modifications apportées à GRR. Détail des modifications apportées à GRR Le 17/07/2008. Page 1/10

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

WebSSO, synchronisation et contrôle des accès via LDAP

GLPI (Gestion Libre. 2 ième édition. Nouvelle édition. de Parc Informatique)

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

L3 informatique TP n o 2 : Les applications réseau

IPS-Firewalls NETASQ SPNEGO

Microsoft Hosted Exchange 2010 DOCUMENT D EXPLOITATION

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Introduction à Sign&go Guide d architecture

Implémentation libre de Liberty Alliance. Frédéric Péters

Sommaire Accès via un formulaire d'identification... 4 Accès en mode SSO... 5 Quels Identifiant / mot de passe utiliser?... 6

IIS, c est quoi? Installation de IIS Gestion de base de IIS Méthodes d authentification. Edy Joachim,

Ce document décrit une solution de single sign-on (SSO) sécurisée permettant d accéder à Microsoft Exchange avec des tablettes ou smartphones.

Sage CRM. 7.2 Guide de Portail Client

Manuel d'installation

Solution Olfeo Guide d'intégration

Gestion d'un parc informatique avec OCS INVENTORY et GLPI

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Définition des Webservices Ordre de paiement par . Version 1.0

FOIRE AUX QUESTIONS PAIEMENT PAR INTERNET. Nom de fichier : Monetico_Paiement_Foire_aux_Questions_v1.7 Numéro de version : 1.7 Date :

Sage CRM. Sage CRM 7.3 Guide du portable

SAML et services hors web

ESCALE MANUEL UTILISATEUR SIMPLIFIÉ ÉTAT : VERSION VALIDÉE DGFIP - BUREAU SI-2B - DEPS - ÉCHANGE DE DONNÉES. Version 1.

OWASP Open Web Application Security Project. Jean-Marc Robert Génie logiciel et des TI

Mise en place SSO. Mise en place SSO. 1. Installation de Tomcat sur le serveur OCR (Windows) 2. Ajout des librairies. by LegalBox

EoleSSO EOLE 2.3. Documentation sous licence Creative Commons by-nc-sa - EOLE (http ://eole.orion.education.fr) révisé : Septembre 2014

Application des Spécifications détaillées pour la Retraite, architecture portail à portail

Programmation Web. Madalina Croitoru IUT Montpellier

Comment développer et intégrer un module à PhpMyLab?

DSI - Pôle Infrastructures

Installation du point d'accès Wi-Fi au réseau

DESCRIPTION DU COMPOSANT

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Gestion des identités

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

Les matricules utilisateur dans l'intranet ULB... 7 Matricules provenant d'ids... 8 Matricules provenant de DCOR... 9

Information sur l accés sécurisé aux services Baer Online Monaco

Espace numérique de travail collaboratif

POVERELLO KASONGO Lucien SIO 2, SISR SITUATION PROFESSIONNELLE OCS INVENTORY NG ET GLPI

Serveur de partage de documents. Étude et proposition d'une solution afin de mettre en place un serveur de partage de documents.

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

LemonLDAP::NG. LemonLDAP::NG 1.2. Clément OUDOT RMLL 9 juillet 2012

CAS, un SSO web open source. 14h35-15h25 - La Seine A

Oauth : un protocole d'autorisation qui authentifie?

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

Conception d'un système d'information WEB avec UML Par Ass SERGE KIKOBYA

Les Imprimantes EOLE 2.3. Documentation sous licence Creative Commons by-nc-sa - EOLE (http ://eole.orion.education.fr) révisé : Janvier 2014

MINISTÈRE DES SOLIDARITÉ ET DE LA COHÉSION SOCIALE

TP JAVASCRIPT OMI4 TP5 SRC

Présentation de la solution Open Source «Vulture» Version 2.0

WebDAV en 2 minutes. Tous ces objectifs sont complémentaires et ils sont atteints grâce au seul protocole WebDAV. Scénarii

ADMINISTRATION DE ADOBE LIVECYCLE MOSAIC 9.5

Authentification EoleSSO

Perso. SmartCard. Mail distribution. Annuaire LDAP. SmartCard Distribution OCSP. Codes mobiles ActivX Applet. CRLs

Solutions d accès sécurisées pour opérer une Market Place Saas multitenante

Comment utiliser mon compte alumni?

d authentification SSO et Shibboleth

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Introduction aux architectures web de Single Sign-on

Programmation Web. Introduction

Transcription:

Guidee d interfaçage SSO Connexion des ressources aux plates-formes de type Corrélyce Titre du document Nom du document Date Auteur(s) Observations Guide d interfaçagee SSO CycDiff GuideSSO_070712.pdf 7 juillet 2012 Version 2 CRDP de l académie d Aix-Marseille - Alexandre Mathieu, Nicolas Michel, Gérard Puimatto «Interfaçage SSO - Connexionn des ressources aux plates-formes de type Corrélyce» réaliséé par le CRDP de l'académie d'aix-marseille est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d'utilisation Commerciale - Partage dans less Mêmes Conditions 3.0 France. Sommaire 1. Contenu de ce document... 2 2. Présentation générale de CAS... 3 2.1. Intérêt... 3 2.2. Fonctionnement de base... 3 2.3. Fonctionnement en mode proxy-cas... 4 2.4. Notions de TGC et ST... 5 2.5. Fonctionnement en mode Proxy-CAS... 5 3. Implémentation côté éditeur... 6 3.1. Création d'une page d'accès à la ressource... 6 3.2. Informations mises à disposition à l issue d une connexion réussie... 7 3.3. Liaison avec l url d accès... 7 3.4. Tests... 7 3.5. Exemples de flux XML CAS... 8 4. Exemples de code utilisables pour la réalisation de la page d accès... 8 4.1. Principe fonctionnel... 8 4.2. Les exemples de code proposés ci-après... 9 4.3. Licence.txt... 9 4.4. Ressource.php... 10 4.5. single_cas_secure.php... 11 4.6. Multiple_cas secure.php... 12 4.7. Lib.php... 13 4.8. Corree.php... 14 4.9. Login.php... 17 4.10. Logout.php... 18

Guide d interfaçage SSO 1. CONTENU DE CE DOCUMENT Ce document est destiné aux correspondants techniques des éditeurss de ressources en ligne souhaitantt intégrer leurs ressources dans l une des plateformes dérivées de Corrélyce C (Corrélyce, Courdecol13, Coréprim, etc.). Il décrit techniquement les protocoles d interfaçage des ressources en accès SSO, notamment les modes CAS utilisés. En annexe, des exemples de codes sont fournis pour éclairer les explications et fournir une base de travail aux programmeurs de ces interfaces. Dans les pages qui suivent, [CORREE] désigne l application qui assure le fonctionnement de la plate-forme. Le cœur des plateformes dérivées de Corrélyce, décrit ci-dessous, est fondé sur une organisation de type «socle ENT», appuyé sur système SSO (Single Sign On, authentification unique). Au-delà de la facilité de ne pas avoir à ressaisir l identification pour chaque service accédé, le SSO permet aussi d ouvrirr des canaux d accès aux ressources d éditeurs tiers sans avoir à communiquer d informations nominatives. Le recours au SSO sans transmission d identifiants nominatifs est lee principe de base adopté pour la connexion aux ressources via les ENT, notamment décrit par le SDET ett les avis de la CNIL. Figure 1 - Organisation générale de Corrélyce Les ressources peuvent être gratuites ou payantes, soumises à contrôle d accès ou pas. Le dispositif évoqué ici vise à décrire les accès aux ressources à accès contrôlé, qu elles soient gratuites ou payantes. La propagation de l authentification vers les ressources utilise le protocole CAS. CRDP de l Académie d Aix-Marseillee Juillet 2012 page 2

Connexion des ressources aux plates-formes de type Corrélyce 2. PRESENTATION GENERALE DEE CAS CAS est un système d'authentification unique développé par l'universitéé de Yale 1. C'est un mécanisme très fiable, qui est implanté dans de nombreuses universités et organismes dans lee monde. CAS est une application Web écrite en Java et distribuée comme un logiciel libre. 2.1. Intérêt CAS évite de s'authentifier à chaque fois qu'on accède à une applicationn en mettant en place un système de ticket. C est un système de SSO : on s'authentifie sur un site web, et on est alorss authentifié sur tous les sites web qui utilisent le même serveur CAS. 2.2. Fonctionnement de basee Dans son fonctionnement de base, une application CASifiée 2 s'en remet à CAS pour son authentification. Lors de l'accès d'un utilisateur à une page protégée, le serveur CAS estt interrogé. Si l utilisateurr est identifié sur le serveur CAS, c est cette identification qui est soumise au servicee demandé ; si l utilisateur n est pas authentifié sur le serveur CAS, la fenêtre d authentification est affichée. L existence d une authentification sur le serveur CAS est conservée sur le navigateur du client sous la forme d un cookie. De même, tous les échanges entree l application demandéee et le serveur CAS sontt réalisés au moyen de edirections via le navigateur (http 302). 3 - authentificationn Serveur CAS 4 auth OK : TGC + ST TGC 5 validation ST Navigateur web (utilisateur) 4 transmission ST 2 - demande authentification 1 - demande initiale Application cassifiée Figure 2 - Synoptique simplifié des s échanges (utilisateur non authentifié a surr le CAS) 1 Central Authentication Service : http://www.ja-sig.org/products/cas/index.html. 2 Une application CASsifiée est une application qui se connecte à un serveur CAS pour son s identification. Document technique du projet Corrélyce Corrélyce et Corrélyce-diffusion sont des marques déposéess par la Région PACA page 3

Guide d interfaçage SSO Serveur CAS 3 TGC OK : transmission ST TGC 4 validation ST Navigateur web (utilisateur) 3 transmission ST 2 - demande authentification 1 - demande initiale Application cassifiée Figure 3 - Synoptique simplifié des échanges (2ème connexion utilisateur déjà authentifié sur le CAS) Dans les Applications Coré, une version de CAS plus élaborée a été choisie, qui page de l éditeur. Il s agit du «Proxy CAS» simplifie l interface côté 2.3. Fonctionnement en mode proxy-cas En mode Proxy CAS, une application mandataire assure la gestion des accès. a Figure 4 - Mode Proxy CAS, première connexion CRDP de l Académie d Aix-Marseillee Juillet 2012 page 4

Connexion des ressources aux plates-formes de type Corrélyce Serveur CAS TGC 3 auth OK : TGC + ST 4 demande PT 6 validation PT Navigateur web (utilisateur) 3 transmission ST 2 - demande authentification 1 - demande initiale PGT Connecteur mandataire cassifié 5 transmission PT Application cible Figure 5 - Mode Proxy CAS, session CAS déjà ouverte 2.4. Notions de TGC et ST 2.4.1. Ticket-Granting Cookie (TGC) Le TGC, présent dans les schémass précédents, est un cookie de session qui est transmis par le serveurr CAS au navigateur du client lors de la phase de login. Ce cookie ne peut être lu / écrit que par le serveurr CAS, sur canal sécuriséé (https). Il est présent durant toute la session dee l'utilisateurr et permet d'obtenir des Service Ticket auprès du serveur CAS. Si le navigateur web n'accepte pas les cookies, l'utilisateur devra see ré-authentifier à chaque appel au serveur CAS. 2.4.2. Service Ticket (ST) Ce ticket va servir à authentifier une personne pour une application web donnée. Il est envoyé par le serveurr CAS après que l'utilisateur s'est authentifié et est transporté dans l'url. Ce ticket ne peut être utilisé qu'une seule fois. Ill y a ensuite dialogue direct entre l'application web et le CAS via un GET http (sous la forme d une redirection http 302 sur le navigateur), avec le ST en paramètre. En réponse, le serveur CAS retourne l'identifiant l de la personne, et donc l'authentifie. Il invalide également le ticket (libération des ressources associées). En fait, ce ticket concerne une personne, pour un service ; il n est utilisable qu une seule fois. 2.5. Fonctionnement en mode Proxy-CAS Le fonctionnement en mode proxy permet à une application proxy-cas de donner accès à d'autres applications clientes sous condition. Ces applications clientes valideront le ticket transmis par l'application proxy auprès du serveur CAS. c'est l'application proxy qui est chargéee de faire tous les testss nécessaires pour autoriser ou nonn l'accès à l'application clientee demandée (i.e. générerr ou non le PT P nécessaire) l'application cliente ne peut être accédéee par l'utilisateur qu'en passant par l'application proxy 2.5.1. Proxy-Granting-Tickeune application web «proxy-cas» disposant d'un ST valide. Ce tickett confère au proxy CAS la possibilité de demander au serveur CAS de générer un Proxy Ticket (PT) pour une application tierce et une personne donnée. (PGT) Il est envoyé par le serveur CAS à Document technique du projet Corrélyce Corrélyce et Corrélyce-diffusion sont des marques déposéess par la Région PACA page 5

Guide d interfaçage SSO 2.5.2. Proxy-Tickela demandee d'un proxy CAS. Il permet d'authentifier l'utilisateur pour un service distant, avec lequel le client web n'a pas d'accès direct. Le service distant l'utilisera comme le ST, mais sur une URL différente. CAS dispose alors de deux servicess distincts pour la validation de ses tickets : servicevalidate ( pour les ST) et proxyvalidate (pour les PT). Le PT est lié au service distant et n'est pas réutilisable. Selon les implémentations de CAS, le PT peut aussi être désigné par less initiales ST. 3. IMPLEMENTATION COTE EDITEUR L'utilisation de CAS pour gérer les accès à une application en ligne est basée b sur des standards de l'internett (http, https et xml) et ne requiert pas de langagee de programmation particulier. Pour pouvoir prendre en compte les demandes d'accès, deux opérationss sont nécessaires : (PT) Il est généré par le serveur CAS à mettre en place une page d' 'accès à la ressource ; Indiquer l'adresse de cette page dans les données de descriptionn de la ressource dans le catalogue. 3.1. Création d'une page d'accès à la ressource La page d'accès à la ressource doit être une page «dynamique» (dans un langage tel que Java, PHP, ASP, etc.). Le programme inclus dans cette page doit vérifier les droits de l appelant, en s appuyant sur les servicess CAS, puis, si les conditions sont réunies, ouvrir l accès. Pour vérifier les droits de l'appelant, il est nécessaire de réaliser les actions suivantess : 1. vérifier qu'un paramètre nommé «ticket» est bien passé en paramètre, sinon afficher un message d' erreur ; 2. appeler la page [URL CAS PROXYVALIDATE] avec 2 paramètres : - «ticket» : le paramètre ticket passé en paramètre URLL ; - «service» : l'url de la page courante. Attention, l'url de cette page doit être cellee inscrite dans la notice du catalogue. En effet, le ticket PT P généré par CAS prend en compte cette URL et la validation du PT vérifie la correspondance de l' 'URL passée lors de la génération du PT avec l'url de la page courante. 3. analyser la réponse XML du serveurr CAS : - erreur d'authentification : afficher une erreur à l'utilisateur ; - authentification réussie : extraire les informations d'identifiant numérique d'utilisateur, sa classe, son rôle, le SIREN et le RNE de son établissement et donnerr accès à la ressource. r Les exemples de code donnés plus loin permettent d illustrer ces traitements. Notes : Les librairies clientes CAS disponibles dans de nombreux langages de programmation 3 cachent ces échanges clients-serveurs. Il suffit généralement de leur fournir l'adresse du serveur CAS et d'indiquer que la page est un client proxy CAS. Leur utilisation ne permet toutefois pas toujours de se connecter à Corréé, compte tenu de l utilisation d un format de ticket non standard. Un éditeur / diffuseur qui propose plusieurs ressources à [CORREE] n'est pas obligé de mettre en place une page d'accès par ressource mais peut proposer un point d' 'entrée unique avec un paramètre URL différent, ou une redirection d URL, par ressource (paramètre «idressource» par exemple qui contient un identifiant unique de ressource dans le système s de l'éditeur). 3 Voir la page http://www.ja-sig.org/wiki/display/casc/clients. CRDP de l Académie d Aix-Marseillee Juillet 2012 page 6

Connexion des ressources aux plates-formes de type Corrélyce 3.2. Informations mises à disposition à l issue d unee connexionn réussie Les tags XML à extrairee de la validation réussie du «jeton» renvoyé parr [CORREE] sont : cas:user identifiant numérique unique d'un utilisateur cas:siren Siren de l'établissement (ou de l'entreprise pour un éditeur) cas:rne RNE de l'établissement (ou de l'entreprise pourr un éditeur) (optionnel) cas:profile «EDITEUR», «ELEVEE», «PROFESSEUR» ou «AUTREE» cas :class classe de l'élève ou classes de l'enseignant (optionnel) On notera que le flux XML retourné par le serveur proxy-cas ne contient en aucun cas d identificationn nominative de l usager. Les informations fournies permettent de garantirr que chaquee utilisateur dispose d un identifiant numérique stable, ce quii permet si nécessaire de conserverr ses informations de session ou de suivi d une session à l autre. Les données complémentaires d établissement, profil et classe permettent un suivi statistique et un profilage des accès. Dans la grande majorité des cas, les informations nominatives ne n sont pass strictement utiles au fonctionnement des applications. Ce mode dee fonctionnement permet d éviter pour le contributeur les contraintes techniques, réglementaires et légales de gestion d un annuaire. Dans le cas où les informations nominatives sont jugées indispensables au fonctionnement, le contributeurr doit assurerr l alimentation de son propre annuaire par d autres voies, et appuyer sonn fonctionnement sur une déclaration CNIL autonome et le respect des droits des usagers en la matière. La continuité entree l authentification [CORREE] et l application est t alors assuré par la tenue d une table d équivalence entree l identifiant cas:user transmis et l usager déclaré dans l annuaire de l application. Cette table peut être générée en demandant à l usager de saisir lors de sa première connexion via [CORREE] son identifiantt propre à l application (uniquement pseudo, ni nom, ni prénom). Il convient toutefois d éviter au maximumm cette configuration. 3.3. Liaison avec l url d accèss Lors de la validation d un titre, le contributeur d une des plates-formes s [CORREE]] est invité à renseignerr l adresse URL de la page d accès cassifiée à laa ressource. Cette URL est liée à la a plate-forme utilisée, car elle contientt l adresse du serveur d authentification à interroger. Pour les versions permettant l import dee notices LOMFR réalisées avec LOMFRPAD, cette URL doit être saisie dans la section «4.3 localisation» de la notice documentaire LomFR correspondante. Pour les versions fondées sur le moissonnage de Coredu, l URL est saisie par l éditeur dans le formulaire de validation de la ressource,, après saisie des informations commerciales. Attention, l' URL de la page d accès Cassifiée doit être celle inscrite dans cette entrée de la description LOMFR. En effet, le ticket PT généré par CASS prend en compte cettee URL et la validation du PT vérifie l'adéquation de l'url passée lors de la générationn du PT et l'url courante. Cette information est visible uniquement de l'éditeur de la ressource ou de l'administrateur dans l'application [CORREE] et n'apparaît pas lors de consultations publiques du catalogue. 3.4. Tests Les tests d' accès à la ressource peuvent être effectués directement par les contributeurs dans leur interfacee de gestion des titres : menu «gestion des titres», sélectionner le titre à tester cliquer sur le contenu de la colonne «Accès» du titre choisi cliquer sur le lien «tester» dans la nouvelle page l'utilisateur est alors redirigé vers l'url d'accès indiquée dans la notice LOMFR avec un ticket valide en paramètre Document technique du projet Corrélyce Corrélyce et Corrélyce-diffusion sont des marques déposéess par la Région PACA page 7

Guide d interfaçage SSO 3.5. Exemples de flux XML CAS 3.5.1. Authentification réussie En cas d authentificationn réussie, le flux suivant est retourné. <cas:serviceresponse xmlns:cas='http://www.yale.edu/tp/cas'> <cas:authenticationsuccess> <cas:user>uam00010</cas:user><cas:rne>0131313z</cas:rne> ><cas:siren> >602060147</ /cas:siren> <cas:profile>editeur</ /cas:profile><cas:proxies> <cas:proxy> >https://www.correlyce. fr/correlyce/casproxy/receptor</cas:proxy> </cas:proxies></cas:authenticationsuccess></cas:serviceresponse> Le tag «cas:authenticationsuccess» indique que l'authentification est réussie. (exemple tiré de Corrélyce. Pour une autre plate-forme, l URL du serveur CAS sera différente) 3.5.2. Authentification échouée En cas d échec d authentification, le flux suivant est retourné <cas:serviceresponse xmlns:cas='http://www.yale.edu/tp/cas'> <cas:authenticationfailure code=' INVALID_TICKET'> le ticket 'ST-63-PJraQneKSfeXgrI4pvn20sXlFKQHcLWuMrU-20' est inconnu </cas:authenticationfailure></cas:serviceresponse> Le tag «cas:authenticationfailure» indique quee l'authentification a échouée 4. EXEMPLES DE CODE UTILISABLES POUR LA REALISATION DE LA PAGE D ACCES Les codes qui suivent sont mis à disposition pour faciliter la connexion des ressources. Ils s appuient sur le langage php, utilisé à titre d exemple. 4.1. Principe fonctionnel En mode standard d accès à une ressource r protégée en php, un module login.php est chargé d établir la session. Login.php Logout.php Navgateur client Ressource test.php Exemple d application php en accès protégé à rendre accessible via CORREE Figure 6 - Accès protégé standard en phpp Quand la ressource est connectée à [CORREE], l accès se fait via unee page d accès spécifiquement mise en place pour la connexion de la ressource à la plate-forme, qui met en œuvre œ le SSO de [CORREE]. 1. l'utilisateur accède à une ressource depuis [CORREE] (ressource-test.php dans l exemple suivant); 2. il est redirigé, après vérification, sur la page d'accès (ressource. php dans l exemple suivant) avec un PT dans l'url ; 3. la fonction secure() vérifie l'authentification sur le serveur CAS : - en cas d'échec, un formulaire d'authentification est présenté, - en cas de succès la session PHP est complétée par les données issues duu jeton CAS ; CRDP de l Académie d Aix-Marseillee Juillet 2012 page 8

Connexion des ressources aux plates-formes de type Corrélyce 4. la ressource est affichée, on peut aussi faire une nouvelle redirection vers la ressource. Login.php Logout.php Navgateur client CORREE Ressource test.php Exemple d application php en accès protégé à rendre accessible via CORREE ressource.php Site éditeur single_cas secure.php lib.php Corree.php A noter! Le les Figure 7 - Avec [CORREE], l'accès est géré par la page d'accès ressource.php 4.2. Les exemples de code proposés ci-après fonctionnement décrit nécessitee que PHP soit installé sur votre serveur avec modules openssl, domxml et la directive allow_url_fopen=on. Le module Curl est recommandé. 4.3. Licence.txt Le fichier licence.txt est l expression de la licence du code des fichiers fournis //========= ============ ============ ============ ============ ============ ===== //= licencee //========= ============ ============ ============ ============ ============ ===== // Le programme dont le code suit a été créé à titre d'exemple par le // Centre Régional de Documentation Pédagogique de l'académie d'aixx Marseille // à l'attention des éditeurs proposant des ressources pour les plateformes // de mise à disposition de ressources en ligne de type Corrélyce, projet // de la région Provence Alpe Côte d'azur. // Il est à adapter par l'éditeur et ne saurait être utilisé tel que. // // Auteur : CRDP Aix-Marseille - Alexandre Matthieu // Version : 2012_05_14 // Licence : Cecill V2 (http://www.cecill.info/licences.fr.html), compatible c GNU GPL V3 // Selon les termes de ces licences, chacun est libre d' 'adapter // et de diffuser ce programme sans demande préalable, // et sans garantie de de la part de l'auteur. // Document technique du projet Corrélyce Corrélyce et Corrélyce-diffusion sont des marques déposéess par la Région PACA page 9

Guide d interfaçage SSO 4.4. Ressource.php ressource.php est appelé «Page d accès» dans les différentes documentations et constitue le point d entrée de votre site pour une application externe. L adresse complètee de ce connecteur est celle qui est attendue pour renseigner le champ 4.3 (system/localisation) de la notice documentaire, ou la zone localisation du formulaire de validation de la ressource (selon la version utilisée). Ressource.phpp représentee la page d accès que vous devez installer sur votre site pour en protéger les accès auu moyen de [ CORREE] <?php @session_start(); // contacte un seul serveur CAS par ex. correlyce require_once( 'single_cas_secure.php' );; OU courdecol13 // contacte plusieurs serveurss CAS par ex. correlyce ET courdecol13. //require_once( 'multiple_cas_secure.php' ); // protection de la ressource @secure();?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTMLL 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html lang="en" xmlns="http:// /www.w3.org/1999/xhtml"> <head> <title>ressource protégée 1</title> <link href="css/simple.css" rel="stylesheet" type= ="text/css" "> <meta content="text/ /html; charset=utf-8" " http-equiv="content-type"> </head> <body> <h1>ressource 1</h1> <p>bonjour <?php echo $_SESSION['userid' ']?> (<?php echo @$_SESSION['rne']?>) <?php if (isset($_session['corree'])) {?> depuis <?php echo $ SESSION['corree']?> > <?php?> </p> <div class="logout"> <a href="logout.php" ">se déconnecter</a> </div> </body> </html> CRDP de l Académie d Aix-Marseillee Juillet 2012 page 10

Connexion des ressources aux plates-formes de type Corrélyce 4.5. single_cas_secure.php single_cas secure.php est un module logiciel contenant la fonction secure(), appelée par ressource.phpp lorsque l on connecte une ressource à une seule plate-forme [CORREE]. Ce code peut être recopié sur votre serveur et adapté en fonction des besoins.. Cet exemple est codé pour Corrélyce. Pour unee autre plate-forme, les URL CAS doivent être modifiées en conséquence (URL du CAS de la plate-forme auu lieu de http://cas.correlyce.fr/cas). <?php require_once('lib.php'); require_once('corree.php'); // L'URL du serveur CAS define('cas_base_url', 'http://cas.correlyce.fr/cas'); // L'URL du service tel que déclaré danss la notice. // ici on utilise l' 'URL courante, ce quii évite d'avoir à intervenir sur le code notice est modifiée.... define('service_url' ', get_page_url()); si la $corree = new Corree(CAS_BASE URL, SERVICE_URL); * Vérifie que l'accés à l'url est bien authentifié. * Si l'url contient un jeton CAS (ticket) il est vérifié. * Sinon affiche le formulaire d'authentification. function secure() { global $corree; if (!isset($_session['userid'])) { if (isset(( $_GET['ticket'])) { $token = $corree->authenticate($_get['ticket']); if ($token!== FALSE) { $_SESSION[ ['userid'] = $token[' 'user']; // il est aussi possible d'injecter les $_SESSION[ ['userrne'] = $token[ ['rne']; autres éléments de $token $ danss la session return TRUE; header('http/1.1 401 Unauthorized'); require('login.php') ); exit(0);?> Document technique du projet Corrélyce Corrélyce et Corrélyce-diffusion sont des marques déposéess par la Région PACA page 11

Guide d interfaçage SSO 4.6. Multiple_cas secure.phpp multiple_cas_secure.php est un module logiciel contenant la fonction secure() s appelée par ressource.phpp lorsque l on connecte une ressourcee à plusieurss plates-formes [CORREE]. Il permett de valider les accès via le serveur CAS de chacune des plates-formes s dont les adresses sont enregistrées. Ce code peut être recopié sur votre serveur et adapté en fonction des besoins. Cet exemple est codé pour Corrélyce et Courdecol13. Pour ajouter unee autre plate-forme, il est nécessairee d ajouter l URL du CAS dans le «array» $cas. <?php require_once('lib.php'); require_once('corree.php'); // tableau contenantt les connecteurs vers les serveurs CAS autorisés a à authentifier des ressources. $cas = array( 'correlyce' => new Corree('https://cas.correlyce.fr/cas', get_page_url()), 'courdecol13' => new Corree('https://www.courdecol13.org/cas', get_page_url()) ); * Vérifie que l'accès à l'url est bien authentifié. * Si l'url contient un jeton CAS (ticket) il est vérifié surr les serveurs CAS déclarés dans $cas. * UN SEUL des ces serveur peut valider le jeton. * Sinon affiche le formulaire d'authentification. function secure() { global $cas; if (!isset($_session['userid'])) { if (isset(( $_GET['ticket'])) { foreach($cas as $label => $corree) { $token = $corree->authenticate($_get['ticket']); if ($token!== FALSE) { $_SESSION[ ['userid'] = $token[' 'user']; $_SESSION[ ['corree'] = $label; // permet authentifier le jeton. d'identifier par la suite le serveur CAS qui à // il est aussi possible d'injecter les $_SESSION[ ['userrne'] = $token[ ['rne']; autres éléments de $token $ danss la session return TRUE; header('http/1.1 401 Unauthorized'); require('login.php') ); exit(0);?> CRDP de l Académie d Aix-Marseillee Juillet 2012 page 12

Connexion des ressources aux plates-formes de type Corrélyce 4.7. Lib.php lib.php est un module propose une fonction quii retourne l URL courante sous forme de chaîne. Cette URL peut être différente de celle déduite du script PHP, par exemple en e cas de réécriture (utilisation de mod_rewrite). Attention, cela ne fonctionne qu avec Apache. <?php * @return string L'URL courante * qui peut-être différente de celle déduite à partir du nom du script * par exemple en cas de réécriture (ie. utilisation de mod_ rewrite). * Attention : cela ne fonctionne qu'avecc Apache.... function get_page_url() { $page_url = (@$_SERVER['HTTPS'] == 'on'))? 'https://' : 'http://'; PHP $page_url.= $_SERVER['SERVER NAME']; if ((@$_SERVER['HTTPS']!== 'on' && $_SERVER['SERVER_PORT']!== '80') (@$_SERVER['HTTPS'] === 'on' && $_SERVER['SERVER_PORT'] $page_url.= ':'.$_SERVER["SERVER_PORT"]; $page_url.= reset(explode("?" ", $_SERVER['REQUEST URI'])); return $page_url;?>!== '443'))) { Document technique du projet Corrélyce Corrélyce et Corrélyce-diffusion sont des marques déposéess par la Région PACA page 13

Guide d interfaçage SSO 4.8. Corree.php corree.php est un module logiciell maintenu par le CRDP et régulièrement actualisé en fonction f des évolutions techniques. Il est requis par single_cas_secure.php ou multiple_cas_secure.php (instructionn «require_once( corree.php )» en début de code) qui formate les appelss CAS et interprète les retours. Il doit être recopié sur votre serveur pour être utilisé par la page d accès. <?php * @copyright CRDP de l'académie d'aix-marseille * @author Alexandre Mathieu * @version 0.12 define('cas_ns', 'http://www.yale.edu/tp/cas'); class Corree { private $cas_url; private $service_url; * Type d'erreur utilisé lors d'un échec d'authentification. * @var int E_USER_NOTICE, E_USER_WARNING, E_USER_ERROR * ou FALSE pour ne pas générerr d'erreur.. public $error_type = E_USER_WARNING; * Type d'erreur utilisé lors d'une authentification réussie.. * @var int E_USER_NOTICE, E_USER_WARNING, E_USER_ERROR * ou FALSE pour ne pas générerr d'erreur.. public $success_typee = E_USER NOTICE; * Délai d' 'attente pour la réponse du serveur CAS. * @var int Durée en secondes. public $timeout = 5; * Vérification du certificat SSL du serveur CAS. * @var boolean public $verify_peer = TRUE; * @param string $cas_url URL de serveur CAS. * @param string $service_url URL du service tel que renseigné dans la function construct($cas_url, $service url) { $this->cas_url = $cas_url; $this->service_url = $service url; notice. * Valide le 'proxy ticket' auprès du serveur CAS. * * @param string $ticket Le 'proxy ticket' passé en paramètree dans la requête. * * @return string[] Renvoi un tableau contenant les détails du d jeton CAS reçu CRDP de l Académie d Aix-Marseillee Juillet 2012 page 14

Connexion des ressources aux plates-formes de type Corrélyce ) * en cas d'authentification réussie, FALSE sinon (échec ou erreur...) e * @examplee pour un jeton CAS : * <cas:serviceresponse xmlns:cas='http:/ //www.yale.edu/tp/cas'> * <cas:authenticationsuccess> * <cas:user>endjs</cas:user> * <cas:profile>eleve</cas:profile> * <cas:rne>0123467x< </cas:rne> * <cas:proxies> * <cas:proxy>https:/ //foo.bar.com/pgtcallback</cas:proxy> * </cas:proxies> * </cas:authenticationsuccess> * </cas:serviceresponse> * le tableau renvoyé sera : * Array( 'user' => 'endjs', 'profile' => > 'eleve', 'rne' => '0123467X'' public function authenticate($ $ticket) { $xmlcontent = $this->get_token($ticket); ; if ($xmlcontent === return FALSE; FALSE) { $dom = new DomDocument(); if (!($dom->loadxml($xmlcontent))) { if ($this->error_typereturn FALSE; { trigger_error(' 'invalid response.', $rootelt = $dom->documentelement; $this->error_type); if ($rootelt->localname!= 'serviceresponse' $rootelt->namespaceurii!= CAS_NS) { if ($this->error_typetrigger_error('invalid response', $this->error_type); { return FALSE; $successelts = $rootelt->getelementsbytagnamens(cas_ns, 'authenticationsuccess'); if ($successelts->length == 0) { $errorelts = $rootelt->getelementsbytagnamens(cas NS, 'authenticationfailure'); if ($this->error_type) { trigger_error('authentication >error_type); failed, '. $errorelts->item(0)->nodevalue, $this- return FALSE; $success = $successelts->item( (0); $retval = $is_proxy array(); = FALSE; foreach( $success->childnodes as $node ) { if ($node->nodetype === XML_ELEMENT_NODEE && $node->namespaceuri === CAS_NS) { if ($node->localname === 'proxies') { $is_proxy = TRUE; else { $retval[$node->localname] = $node->nodevalue; Document technique du projet Corrélyce Corrélyce et Corrélyce-diffusion sont des marques déposéess par la Région PACA page 15

Guide d interfaçage SSO if (!$is_proxy) { if ($this->error_type) { trigger_error('not a proxy ticket', $this->error_type); return FALSE; if ($this->success_type) { trigger_error( 'successful authentication', $this->success_type ); return $retval; private function get_token($ticket) { global $is_curl_installed; $url = $this->cas_url. '/proxyvalidate''. '?'. http_build_query(array('ticket' => $ticket, 'service' => $this->serv$ vice_url)); if ($is_curl_installed) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,, TRUE); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,, $this->timeout); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,, $this->verify_peer) ); $data = curl_exec($ch); if ($data === FALSE) { if ($this->error_type) { trigger_error(curl_error( ($ch), $this->error_type); curl_close($ch); return $data; else { file_get_contents($url); function _check_curl_installed() { global $is_curl_installed; if (isset($is_curl_installed))) return; if (in_array('curl', get_loaded_extensions())) { $is_curl_installed = TRUE; else { if ($this->error_type) { trigger_error( "l'extension curl n'est pas installée, le certificat SSL du serveur CAS ne sera donc pas vérifié", $this->error_type) ); CRDP de l Académie d Aix-Marseillee Juillet 2012 page 16

Connexion des ressources aux plates-formes de type Corrélyce $is_curl_installed = FALSE; * vérifie la présence de l'extension curl. _check_curl_installed();?> 4.9. Login.php Login.php est un module logiciel standard quii gère les sessions de cassification. ressource-test.php en l absence de <?php * Formulaire d'authentification * en cas de succès redirige l' 'utilisateur vers la ressource * après assignation de la variable de session 'userid'. * * @copyright CRDP de l'académie d'aix-marseille * @author Alexandre Mathieu * require_once('lib.php'); * vérifie les données d'authentificationn fournies par le formulaire. * @return TRUE en cas d'authentificationn réussie, FALSE sinon (échec ou erreur....) function authenticate( $login, $passwordd ) { // ici on se contente d'une simple comparaison. // habituellement on interrogee une base de donnée, un annuaire... return $login === 'corree' && $password === 'corree'; @session_start(); if ($_SERVER['REQUEST_METHOD'] === 'POST') { $userid = $_POST['userid']; $password = $_POST[' 'password']; $ressourcee = $_POST[ ['ressource']; if (authenticate($userid, $password)) { $_SESSION[ ['userid'] = $userid; header('location: '. $ressource); exit(0); else { unset($_session['userid']); else { $ressourcee = get_page_url();?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTMLL 1.0 Strict//EN" Document technique du projet Corrélyce Corrélyce et Corrélyce-diffusion sont des marques déposéess par la Région PACA page 17

Guide d interfaçage SSO "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html lang="en" xmlns="http:// /www.w3.org/1999/xhtml"> <head> <title>formulaire d' 'authentification</title> <link href="css/simple.css" rel="stylesheet" type= ="text/css" "> <meta content="text/ /html; charset=utf-8" " http-equiv="content-type"> </head> <body> <h2>entrez votre identifiant et votre mot de passe.</h2> <?php if ($_SERVER['REQUEST_METHOD'] === = 'POST') {?> <div id="status" class="errors"> Les informations transmises n' 'ont pas permis de vous authentifier. </div> <?php?> <form action='login..php' method='post'> <input type="hidden" " name="ressource" value="<?phpp echo $ressource;?> >" /> <label>identifiant : <input type="text" name='userid' accesskey="i" value="<?php if (isset($userid)) echo $userid;?>" /> </label> <label>mot de passe& : <input type='password' name='password' autocomplete="off" size="25" accesskey="m" /> </label> <input type='submit' ' value='se CONNECTER' accesskey="c" /> <input type='reset' </form> </body> </html> value='effacer' accesskey="e" /> 4.10. Logout.php Logout.php est un module logiciel standard qui gère les sessions de ressource-test.php en l absence de cassification. <?php @session_start(); echo $_SESSION['userid']; if (isset($ $_SESSION['userid'])) { unset($_session['userid']) ; header('location: http://www.google.fr');?> CRDP de l Académie d Aix-Marseillee Juillet 2012 page 18

Connexion des ressources aux plates-formes de type Corrélyce «Interfaçage SSO - Connexion des ressourcess aux plates-formes selon les termes de d la licencee Creative Commons Attribution - Pas d'utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 France de type Corrélycee» réalisé par le CRDP de l'académie d'aix-marseille est mis à disposition Document technique du projet Corrélyce Corrélyce et Corrélyce-diffusion sont des marques déposéess par la Région PACA page 19