13 points par xguru 2024-07-29 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • SAML (Single Assertion Markup Language) est une norme qui définit des règles pour échanger des messages de sécurité au format XML
  • Il est principalement utilisé pour l’échange de messages entre trois entités indépendantes ou plus
    • Le scénario classique concerne deux systèmes logiciels créés par des entreprises différentes, ainsi qu’un utilisateur
    • Les deux systèmes doivent échanger des informations sur l’utilisateur
    • Il est possible de créer une intégration personnalisée, mais elle est difficile à maintenir
  • SAML simplifie les intégrations complexes en faisant respecter les mêmes règles entre les systèmes

Format des messages SAML

  • Les messages SAML sont au format XML
  • SAML définit la syntaxe des messages et indique comment traiter leur contenu en toute sécurité
  • Par exemple, si vous recevez une balise <Response>, vous savez qu’il faut rechercher une balise <Assertion>
  • Il fournit aussi des indications sur la forme d’une signature numérique et sur la manière de traiter les messages pour éviter des problèmes de sécurité

La flexibilité de SAML

  • SAML a été conçu en mettant l’accent sur la flexibilité. En théorie, on peut faire beaucoup de choses avec SAML, mais cette flexibilité entraîne aussi de la complexité
  • La spécification SAML comporte de nombreuses exceptions, beaucoup de conditions et d’exemples, ce qui ajoute des cas limites
  • Comme SAML est ancien, certaines personnes tirent parti de cette flexibilité
  • En production, surtout avec des systèmes legacy, SAML peut parfois se comporter de manière inhabituelle
  • Dans la plupart des cas, la vie est plus simple si l’on se concentre uniquement sur un petit sous-ensemble de SAML

L’objectif réel de SAML

  • SAML est principalement utilisé pour le Single Sign-On (SSO)
  • SAML définit quelques variantes un peu particulières du SSO, mais en pratique on utilise généralement le Web Browser SSO Profile
  • L’utilisateur final s’authentifie d’abord auprès d’un système centralisé, puis accède à l’application logicielle souhaitée
  • L’utilisateur ne s’authentifie pas directement auprès de l’application
  • Par exemple, si vous avez déjà utilisé Okta pour accéder à votre messagerie, vous avez utilisé le Web Browser SSO Profile

Entités impliquées dans le SSO

  • Trois acteurs interviennent dans le SSO :
    1. l’utilisateur : la personne qui veut utiliser l’application
    2. le fournisseur de services (SP) : l’application elle-même
    3. le fournisseur d’identité (IDP) : le service central utilisé par l’utilisateur pour s’authentifier
  • L’IDP de chaque client peut être considéré comme une base de données. Il suit les données relatives aux personnes
    • Les entreprises utilisent souvent un fournisseur d’identité pour affecter les employés à des départements et leur attribuer différents droits
  • À chaque connexion d’un utilisateur via SAML, il faut récupérer des informations depuis l’IDP. En SSO, il s’agit surtout de demander à l’IDP de confirmer l’identité de l’utilisateur
  • Une relation de confiance préconfigurée avec l’IDP est nécessaire
    • Tous les clients qui utilisent le SAML SSO doivent avoir leur propre configuration dans l’application
    • En revanche, on n’échange pas directement des messages avec l’IDP. En SAML SSO, le fournisseur de services et le fournisseur d’identité communiquent via le navigateur de l’utilisateur

Comment les entités SAML interagissent

  • Processus classique de SAML SSO :
    1. l’utilisateur essaie d’accéder à une partie de l’application dans son navigateur web
    2. on vérifie si l’utilisateur dispose d’un contexte de sécurité valide
    3. comme l’utilisateur n’a pas de contexte de sécurité valide, on affiche une page de connexion
    4. l’utilisateur saisit certaines informations (par exemple une adresse e-mail), qui servent à déterminer la méthode de connexion appropriée
    5. on redirige l’utilisateur vers l’adresse web de l’IDP et on transmet un message SAML à l’IDP via le navigateur de l’utilisateur
    6. l’IDP affiche une demande d’identifiants à l’utilisateur. L’utilisateur s’authentifie avec succès
    7. l’IDP redirige ensuite l’utilisateur vers l’application avec un message SAML contenant des informations sur son authentification
    8. on traite le message SAML et on décide qu’il faut établir un contexte de sécurité pour l’utilisateur
    9. on accorde à l’utilisateur l’accès à la partie souhaitée de l’application
  • Il est également possible de démarrer le processus SAML SSO depuis le fournisseur d’identité
  • Dans ce cas, on ne reçoit pas de requête d’authentification, mais une réponse d’authentification
  • Lors de l’implémentation du support SAML SSO, il faut se préparer au SSO initié par l’IDP

Messages échangés dans SAML

  • Dans SAML SSO, deux types de messages retiennent principalement l’attention
    • Le message envoyé du fournisseur de services vers l’IDP s’appelle une requête SAML (request)
    • Le message renvoyé de l’IDP vers le fournisseur de services s’appelle une réponse SAML (response)
  • Une requête SAML n’est en réalité pas très complexe. Il suffit d’envoyer du XML via une redirection HTTP
  • On inclut un identifiant dans la balise <AuthnRequest> afin que l’IDP puisse renvoyer une balise <Response> liée à la requête d’origine
  • On envoie également à l’IDP des données encapsulées dans une balise <Issuer> pour lui indiquer qui l’on est
  • Une réponse SAML est plus délicate. Elle est généralement transmise via POST
  • Une balise <Response> encapsule conceptuellement plusieurs balises <Assertion>
  • Une balise <Assertion> encapsule des claims sur l’utilisateur (son identité, la manière dont il s’est authentifié auprès de l’IDP, etc.)
  • On traite l’assertion pour décider s’il faut connecter l’utilisateur

Points d’attention

  • De nombreux détails ont été omis ici, en particulier ceux qui sont importants pour la sécurité
  • Sauf si vous vous intéressez personnellement à SAML ou que vous avez une raison professionnelle de l’étudier en profondeur, il n’est pas recommandé d’implémenter vous-même une connexion basée sur SAML. C’est une perte de temps
  • Si vous voulez mettre en place SAML le plus vite possible, nous proposons SSOReady, un projet open source qui abstrait SAML. Cela vous fera gagner beaucoup de temps et vous épargnera bien des souffrances

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.