# Security assertion markup language

Security assertion markup language (SAML) est un standard informatique définissant un protocole pour échanger des informations liées à la sécurité. Basé sur le langage XML, SAML a été développé par OASIS.
SAML propose l'authentification unique (en anglais single sign-on ou SSO) sur le web. De cette manière, un utilisateur peut naviguer sur plusieurs sites différents en ne s'authentifiant qu'une seule fois, sans pour autant que ces sites aient accès à des informations trop confidentielles.
Les solutions de SSO au sein d'un intranet abondent (en utilisant des cookies, par exemple), mais prolonger ces solutions au-delà d'un intranet est problématique, car cela peut entraîner la prolifération de technologies propriétaires dont chacune n'a pas nécessairement la capacité d'interagir avec les autres.
SAML est un standard supporté par un grand nombre de solutions de SSO pour les problèmes de gestion d'identité.
SAML suppose que le commettant (souvent un utilisateur) se soit inscrit avec au moins un fournisseur d'identité (en). Ce fournisseur d'identité est censé fournir des services d'authentification locaux au commettant. Cependant, SAML n'indique pas l'implémentation de ces services locaux ; en effet, pour SAML peu importe comment les services locaux d'authentification sont mis en application (bien que les fournisseurs de service s'en soucient certainement).

## Historique de SAML
### SAML 1.0

SAML 1.0 a été adopté comme norme par OASIS en novembre 2002. SAML a subi une révision mineure et une majeure depuis V1.0, bien qu'étant un protocole relativement simple. SAML 1.0 est d'intérêt plus qu'historique, puisque l'initiative E-Authentication Initiative des É.-U. a adopté SAML 1.0 en tant que technologie de noyau.
Les versions 1.0 et 1.1 de SAML sont semblables. Voir pour des différences spécifiques entre les deux normes.

### SAML 1.1

SAML 1.1 a été ratifié comme norme d'OASIS en septembre 2003. Les aspects critiques de SAML 1.1 sont couverts en détail dans les documents officiels, et. Les novices de SAML devraient probablement commencer par.

### SAML 2.0

SAML 2.0 a été approuvé en mars 2005. Il s'agit d'une version majeure, construite par l'unification de SAML 1, de la norme ID-FF (Identity federation framework) proposée par la Liberty Alliance et du projet universitaire Shibboleth.

## Conception

SAML repose sur un certain nombre de normes existantes:
* Extensible Markup Language (XML)
La plupart des échanges SAML sont exprimés dans une version normalisée de XML, dont on trouve la racine dans le mot SAML (Security Assertion Markup Language)
* XML Schema (XSD)
Les protocoles et les assertions SAML sont spécifiés à l'aide d'un XSD.
* XML Signature
SAML 1.1 et SAML 2.0 utilisent des signatures numériques (basées sur le standard XML Signature) pour l'authentification et l'intégrité des messages.
* XML Encryption
À l'aide de XML Encryption (en), SAML 2.0 fournit des éléments pour les identificateurs de nom chiffrés, les attributs chiffrés et les assertions chiffrées (SAML 1.1 ne dispose pas de fonctionnalités de chiffrement). Attention, il est aujourd'hui connu que XML Encryption a de graves problèmes de sécurité
* Hypertext Transfer Protocol (HTTP)
SAML s'appuie fortement sur HTTP comme protocole de communication.
* SOAP
SAML spécifie l'utilisation de SOAP, en particulier de SOAP 1.1.

## Utilisation

Le principal cas d’utilisation de SAML est pour Web Browser Single Sign-On (SSO).
Un utilisateur utilise un user agent (généralement un navigateur Web) pour demander une ressource Web protégée par un SAML service provider. Le service, souhaitant connaître l'identité de l'utilisateur, envoie une demande d'authentification au SAML identity provider par l'intermédiaire de l'agent d'utilisateur.
* Request la ressource cible dans le Service Provider
* Redirect vers le Service SSO dans le Identity Provider
* Request le Service SSO dans le Identity Provider
* Réponse avec un formulaire XHTML
* Request le Assertion Consumer Service dans le Service Provider
* Redirect vers la ressource cible
* Request la ressource cible dans le Service Provider encore une fois
* Réponse avec la ressource demandée