Connecteur SAML

Authentification unique avec SAML

Définitions

SAML : SAML est un standard informatique définissant un protocole pour échanger de l'information sécurisé. Le protocole permet à un utilisateur de naviguer sur plusieurs sites différents en s'authentifiant une seule fois. SAML suppose que l'utilisateur s'est inscrit avec au moins un fournisseur d'identité.

Fournisseur de service (SP ou service provider) : Le fournisseur de service protège l'accès sans authentification préalable à du contenu et redirige l'utilisateur vers un fournisseur d'identité. Le site cve.grics.qc.ca agit comme fournisseur de service protégeant l'accès aux vidéos.

Fournisseur d'identité (IdP ou Identity provider) : Le fournisseur d'identité s'occupe d'authentifier un utilisateur et fournir de l'information additionnelle associée à son identité. Dans le cas du site cve.grics.qc.ca, une commission scolaire ou une autre organisation qui désire utiliser l'authentification unique est un fournisseur d'identité.

Fonctionnement

L'utilisateur qui n'est pas authentifié accède à une URL précise sur le site de CVE qui sert à l'authentification unique avec SAML. Il choisit son fournisseur d'identité dans une liste et est envoyé chez le fournisseur d'identité pour s'authentifier et récupérer des informations de connexion. Si l'authentification réussit, l'utilisateur est renvoyé sur le site de CVE avec des informations XML sur son école, son groupe, etc. pour que la structure soit créée sur le site de CVE. Finalement, la structure est créée et l'utilisateur est authentifié.

 

Créer la structure XML

Structure du document XML requis

  • Balise « connection » : Contient les éléments nécessaires à la création de la structure école -> enseignants -> groupes -> élèves
  • Balise « current_user »
  • Attribut « email » : chaine de caractère de format courriel, obligatoire, courriel de l'utilisateur
  • Balise « last_name » : Chaine de caractère, obligatoire, nom de famille de l'utilisateur en cours
  • Balise « first_name » : Chaine de caractère, obligatoire, prénom de l'utilisateur en cours
  • Balise « school » : Vide, obligatoire
  • Attribut « type » : « G » ou « T », obligatoire, type d'établissement (« G » pour GPI, « T » pour Tosca)
  • Attribut « id » : code à 6 chiffres, obligatoire, les 3 premiers chiffres représentent le code de la commission scolaire et les derniers chiffres, le code d'établissement.
  • Balise « role »
  • Attribut « group_owner » : 0 ou 1, obligatoire, 0 si l'utilisateur en cours n'est pas propriétaire du groupe en cours (élève) et 1 si l'utilisateur est propriétaire (enseignant)
  • Balise « groups » : optionnel, contient de 0 à 50 utilisateurs si l'utilisateur en cours est un enseignant (group_owner = 1)
  • Balise « user »
  • Attribut « email » : chaine de caractère de format courriel, obligatoire, courriel de l'utilisateur
  • Balise « last_name » : Chaine de caractère, obligatoire, nom de famille de l'utilisateur
  • Balise « first_name » : Chaine de caractère, obligatoire, prénom de l'utilisateur

Exemple d'un document XML valide pour un enseignant

<?xml version="1.0" encoding="UTF-8"?>
<connection>
  <current_user email="ginette.laprof@macs.qc.ca">
    <last_name>laprof</last_name>
    <first_name>ginette</first_name>
    <school type="G" id="123004" />
    <role group_owner="1" />
    <groups>
      <group id="123121" title="Mathématique 501">
        <user email="billy.thekid@macs.qc.ca">
          <last_name>thekid</last_name>
          <first_name>billy</first_name>
        </user>
        <user email="timmy.otool@macs.qc.ca">
          <last_name>otool</last_name>
          <first_name>timmy</first_name>
        </user> 
     </group>
     <group id="123122" title="Français 502">
        <user email="billy.thekid@macs.qc.ca">
          <last_name>thekid</last_name>
          <first_name>billy</first_name>
        </user>
        <user email="johnny.bgoog@macs.qc.ca">
          <last_name>bgood</last_name>
          <first_name>johnny</first_name>
        </user>
      </group>
    </groups>
  </current_user>
</connection>

Exemple d'un document XML valide pour un élève :

<?xml version="1.0" encoding="UTF-8"?>
<connection>
  <current_user email="billy.thekid@macs.qc.ca">
    <last_name>thekid</last_name>
    <first_name>billy</first_name>
  </current_user>
</connection>

XML dans un attribut SAML

Les attributs

Pour que CVE puisse récupérer le XML, le fournisseur d'identité doit placer le XML dans un attribut. Un attribut dans SAML est un endroit où placer de l'information identifié par une clé. Le nom de la clé de l'attribut devra être « cve_xml » pour que le site sache où trouver l'information sur l'utilisateur.

La sérialisation et l'encodage des caractères spéciaux

La sérialisation est un processus consistant à transformer des structures en ligne pour faciliter le « transport » des données.

Pour faciliter la récupération d'une structure complexe comme du XML, CVE a choisi de récupérer du XML sérialisé dans un attribut et de le reconstituer. Puisque le protocole SAML utilise déjà le XML, il faut impérativement encoder le XML qui sera placé dans l'attribut. Voici les caractères problématiques et leur équivalent encodé :

  • « < » doit être remplacé par « &lt; »
  • « > » doit être remplacé par « &gt; »
  • « & » doit être remplacé par « &amp; »
  • « " » doit être remplacé par « &quot; »
  • « ' » doit être remplacé par « &#39; »

Exemple de XML sérialisé

XML avant la sérialisation

<current_group id='1'>
  Math & Français
</current_group> 

XML après sérialisation et remplacement des caractères réservés

&lt;current_group id=&#39;1&#39;&gt;Math &amp; Français&lt;/current_group&gt;

Comment interagir avec CVE

L'inscription de votre IdP

CVE doit connaitre à l'avance les IdP pour rediriger les utilisateurs au bon endroit. Pour se faire, vous devez contacter les techniciens de CVE pour transmettre les informations de votre IdP.

Appeler le SP

Lorsque votre IdP est inscrit, les liens que vous ferez vers le site de CVE ne se feront plus directement à la page d'accueil, mais à l'URL servant à la connexion SAML :

https://cve.grics.qc.ca/saml_login

Si l'utilisateur n'est pas connecté, il verra cet écran dans lequel il pourra sélectionner son organisme :