Présentation de l'authentification unique avec SAML 2.0 dans Indeavor
Cet article fournit au client une vue d'ensemble de la configuration de l'authentification unique avec SAML 2.0.
Présentation de l'authentification unique (SSO)
Le langage SAML (Security Assertion Markup Language) permet aux clients de s'authentifier sur leurs propres systèmes lors de leur connexion à Indeavor. Notre implémentation utilise le protocole SAML 2.0.
SAML est un cadre XML d'authentification et d'autorisation entre deux entités : un fournisseur de services et un fournisseur d'identité. Le fournisseur de services accepte de faire confiance au fournisseur d'identité pour authentifier les utilisateurs. En retour, le fournisseur d'identité génère une assertion d'authentification qui indique qu'un utilisateur a été authentifié.
SAML est un format d'authentification unique (SSO) standard. Les informations d'authentification sont échangées via des documents XML signés numériquement. Il s'agit d'une implémentation SSO (Single Sign-on) complexe qui permet une authentification transparente, principalement entre des entreprises.
Fournisseur d'identité (IDP)/Partie d'assertion : il s'agit du client. Une implémentation courante est Microsoft Active Directory Federated Services (ADFS) ou Azure.
Fournisseur de services (SP)/Partie de confiance : il s'agit d'Indeavor.
Conseil de professionnel Indeavor : Indeavor ne prend en charge que les requêtes initiées par le fournisseur de services.
Configuration du fournisseur d'identité
Le client aura besoin des métadonnées de notre fournisseur de services pour ajouter Indeavor en tant que partie de confiance dans son IDP.
Un fournisseur d'identité est une entité système qui crée, maintient et gère les informations d'identité pour des principaux tout en fournissant des services d'authentification aux applications des parties de confiance au sein d'une fédération ou d'un réseau distribué.
Un fournisseur d'identité propose l'authentification utilisateur en tant que service. Les applications des parties de confiance, telles que les applications Web, confient l'étape d'authentification utilisateur à un fournisseur d'identité de confiance. On dit qu'une telle application est fédérée, c'est-à-dire qu'elle consomme une identité fédérée.
Un fournisseur d'identité est « un fournisseur de confiance qui vous permet d'utiliser une authentification unique (SSO) pour accéder à d'autres sites Web ». L'authentification unique améliore la convivialité en réduisant la fatigue des mots de passe. Elle garantit également une meilleure sécurité en diminuant la surface d'attaque potentielle.
Plus précisément, un fournisseur d'identité SAML est une entité système qui émet des assertions d'authentification en conjonction avec un profil SSO de SAML. Une partie de confiance qui consomme ces assertions d'authentification est appelée fournisseur de services SAML.[1]
[1] https://en.wikipedia.org/wiki/Identity_provider
Les métadonnées peuvent être récupérées par une URL d'Indeavor :
https://identity.[NOMDEL'ENVIRONNEMENT].indeavor.com/saml/metadata.xml
Recommandations
- Algorithme SHA-256
- La SSO d'Indeavor exige que le champ d'identificateur unique fourni par ADFS soit contenu dans le bloc Instruction d'attribut de la réponse. La plupart des clients trouvent que l'utilisation de l'adresse e-mail est le meilleur identificateur unique pour obtenir ce résultat.
- Le paramètre « État de relais» envoyé par Indeavor avec la demande d’authentification SAML doit être inclus dans la réponse SAML du service de fédération revenant à Indeavor.
Configuration d'Indeavor (fournisseur de services)
Un fournisseur de services SAML est une entité système qui reçoit et accepte des assertions d'authentification en conjonction avec un profil d'authentification unique (SSO) du langage SAML (Security Assertion Markup Language).
Dans le modèle de domaine SAML, une partie de confiance SAML est toute entité système qui reçoit et accepte des informations provenant d'une autre entité système. Une partie de confiance SAML qui reçoit et accepte une assertion SAML émise par une autorité SAML présente un intérêt particulier.
Un type important d'autorité SAML est le fournisseur d'identité SAML, une entité système qui émet des assertions d'authentification en conjonction avec un profil SSO de SAML. Une partie de confiance qui consomme de telles assertions est appelée fournisseur de services SAML (ou simplement fournisseur de services si le domaine est implicite). Ainsi, un fournisseur de services SAML est une entité système qui reçoit et accepte une assertion d'authentification émise par un fournisseur d'identité SAML.[1]
[1] https://en.wikipedia.org/wiki/Service_provider_(SAML)
Assertion
Une assertion SAML contient un paquet d'informations de sécurité.
Les assertions SAML sont généralement transférées des fournisseurs d'identité aux fournisseurs de services. Les assertions contiennent des instructions que les fournisseurs de services utilisent pour prendre des décisions concernant le contrôle d'accès. SAML fournit trois types d'instructions :
- Instructions d'authentification ;
- Instructions d'attribut ;
- Instructions de décision d'autorisation.
Les instructions d'authentification déclarent au fournisseur de services que le principal s'est effectivement authentifié auprès du fournisseur d'identité à un moment donné en utilisant une méthode d'authentification particulière. D'autres informations sur le principal authentifié (appelées contexte d'authentification) peuvent être divulguées dans une instruction d'authentification.
Une instruction d'attribut déclare qu'un sujet est associé à certains attributs. Un attribut est simplement une paire nom-valeur. Les parties de confiance utilisent des attributs pour prendre des décisions concernant le contrôle d'accès.
Une instruction de décision d'autorisation déclare qu'un sujet est autorisé à exécuter une action A sur une ressource R compte tenu d'une preuve P. L'expressivité des instructions de décision d'autorisation dans SAML est intentionnellement limitée.[1]
Protocole
Un protocole SAML décrit la façon dont certains éléments SAML (y compris les assertions) sont empaquetés dans les éléments de demande et de réponse SAML, et énonce les règles de traitement que les entités SAML doivent suivre lorsqu'elles produisent ou consomment ces éléments. Pour l'essentiel, un protocole SAML est un simple protocole demande-réponse.
Les protocoles suivants sont décrits en détail dans SAML 2.0 Core :
- Protocole de demande et de requête d'assertion ;
- Protocole de demande d'authentification ;
- Protocole de résolution d'artefacts ;
- Protocole de gestion des identificateurs de nom ;
- Protocole de déconnexion unique ;
- Protocole de mappage des identificateurs de nom[2].
Liaison
Une liaison SAML est le mappage d'un message de protocole SAML sur des formats de messagerie et/ou des protocoles de communication standard. Par exemple, la liaison SOAP SAML spécifie la manière dont un message SAML est encapsulé dans une enveloppe SOAP, qui est elle-même liée à un message HTTP.
Les liaisons suivantes sont décrites dans SAML :
- Liaison SOAP SAML (basée sur SOAP 1.1) ;
- Liaison SOAP inversée (PAOS) ;
- Liaison de redirection HTTP (GET) ;
- Liaison HTTP POST ;
- Liaison d'artefacts HTTP ;
- Liaison URI SAML.
Profil
Un profil SAML décrit en détail comment les assertions, les protocoles et les liaisons SAML se combinent pour prendre en charge un cas d'utilisation défini. Le profil SAML le plus important est le profil SSO du navigateur Web.
Les protocoles suivants sont décrits dans SAML :
- Profils SSO
- Profil SSO du navigateur Web
- Profil de client ou proxy amélioré (ECP)
- Profil de découverte du fournisseur d'identité
- Profil de déconnexion unique
- Profil de gestion des identificateurs de nom
- Profil de résolution d'artefact
- Profil de requête d'assertion/demande
- Profil de mappage des identificateurs de nom
- Profils d'attributs SAML
Ce que nous utilisons
Pour le flux de travail de connexion, nous utilisons le « Profil SSO du navigateur Web » ; les liaisons qui sont prises en charge sont « Liaison de redirection HTTP (GET) » (mobile), « Liaison HTTP POST » (web).
Pour le flux de travail de déconnexion, nous utilisons le « profil de déconnexion unique » ; les liaisons qui sont prises en charge sont « Liaison de redirection HTTP (GET) », « Liaison HTTP POST ».
[1] https://en.wikipedia.org/wiki/Security_Assertion_Markup_Language
[2] https://en.wikipedia.org/wiki/Security_Assertion_Markup_Language
Métadonnées
Les métadonnées SAML sont des données de configuration requises pour négocier automatiquement des accords entre des entités système, comprenant des identificateurs, la prise en charge de la liaison et des points de terminaison, des certificats, des clés, des fonctionnalités cryptographiques et des politiques de sécurité et de confidentialité. Plusieurs spécifications SAML normalisent les structures et le contenu des métadonnées, ce qui permet des processus de gestion efficaces pour les déploiements commercialisables.
Étant donné que les spécifications SAML ont évolué au fil du temps, les spécifications relatives aux métadonnées sont décrites dans plusieurs documents. Ce document non normatif (en anglais) fournit un aperçu global et des liens vers les spécifications normatives.[1]
[1] https://www.oasis-open.org/committees/download.php/51890/SAML%20MD%20simplified%20overview.pdf
L'authentification unique doit être activée dans Indeavor pour que les points de terminaison des métadonnées soient disponibles.
Configurations d'ADFS
Points de terminaison
Conseil de professionnel Indeavor : l'authentification unique doit être activée dans votre domaine pour que le lien vers les métadonnées soit disponible.
Web
Métadonnées et points de terminaison
URL: https://identity.[NOMDEL'ENVIRONNEMENT].indeavor.com/saml/metadata.xml
Description : renvoie les métadonnées du fournisseur de services (voir Description de SAML/Métadonnées). Si le fournisseur SAML n'est pas activé pour le domaine demandé, le point de terminaison renvoie 404.
Gestionnaire de consommateur d'assertions
Description : point de terminaison qui accepte les réponses d'assertion du fournisseur de services. Met en œuvre la validation de l'assertion donnée, extrait le nom d'utilisateur de l'attribut configuré et connecte l'utilisateur s'il s'agit d'un utilisateur d'Indeavor valide.
Service de déconnexion unique
Description : point de terminaison qui accepte les demandes/réponses de déconnexion du fournisseur de services. Met en œuvre la validation des requêtes/réponses données et déconnecte l'utilisateur d'Indeavor.
Page de connexion SAML
Description : page qui implémente la connexion via le fournisseur d'identité SAML. L'utilisateur entre le domaine et l'application trouve le bon fournisseur de services, crée une demande d'authentification et redirige l'utilisateur vers l'URL SingleSignOnService du fournisseur d'identité.
Configurations d'Indeavor
Ajouter le certificat Indeavor pour le chiffrement/la signature des demandes Saml
- Créez un fichier contenant le certificat SAML. Ce fichier doit être accessible depuis l'application.
- Ajoutez le chemin d'accès du fichier à l'adresse Data/Config/SamlSSO.config <samlSSOSettings certificate="chemin d'accès du certificat" password="mot de passe du fichier" />.
Exécutez l'application via une connexion sécurisée (HTTPS). Le fournisseur SAML requiert une connexion HTTPS.
Configuration des métadonnées et du modèle UID au niveau du système
https://support.indeavor.com/hc/en-us/articles/115001794466
Création d'un profil d'utilisateur pour l'authentification unique
https://support.indeavor.com/hc/en-us/articles/115001796366
À quoi s'attendre
XML
Métadonnées du fournisseur d'identité
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" entityID="https://idp.cloudroll.gr">
<md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:KeyDescriptor use="signing">
...
</md:KeyDescriptor>
<md:KeyDescriptor use="encryption">
...
</md:KeyDescriptor>
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://idp.cloudroll.gr/idp/SingleLogoutService" index="0" isDefault="false"/>
<md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>
<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://idp.cloudroll.gr/idp/SSOService" index="0" isDefault="false"/>
</md:IDPSSODescriptor>
</md:EntityDescriptor>
entityID : identificateur unique du fournisseur d'identité.
IDPSSODescriptor : contient des informations sur le fournisseur d'identité.
KeyDescriptor : clé utilisée par l'entité pour la signature et le chiffrement des réponses.
NameIDFormat : format de l'identificateur unique de l'utilisateur.
SingleSignOnService : URL qui a utilisé l'authentification unique.
SingleLogoutService : URL qui a utilisé la déconnexion unique.
Location : URL de la liaison.
Binding : type de réponse de la liaison.
index : index de la liaison.
isDefault : s'il s'agit du service de liaison par défaut pour ce processus.
Métadonnées du fournisseur de services
<md:EntityDescriptor entityID="https://sp.cloudroll.gr" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:mdui="urn:oasis:names:tc:SAML:metadata:ui">
<md:SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:KeyDescriptor use="signing">
...
</md:KeyDescriptor>
<md:KeyDescriptor use="encryption">
...
</md:KeyDescriptor>
<md:ArtifactResolutionService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://sp.cloudroll.gr/Artifact/SOAP" index="1" isDefault="false"/>
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://sp.cloudroll.gr/SLO/SOAP" />
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://sp.cloudroll.gr/SLO/POST" />
<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://sp.cloudroll.gr/SAML2/POST" index="1" />
</md:SPSSODescriptor>
</md:EntityDescriptor>
entityID : identificateur unique du fournisseur d'identité.
SPSSODescriptor : contient des informations sur le fournisseur de services.
KeyDescriptor : clé utilisée par l'entité pour la signature et le chiffrement des réponses.
NameIDFormat : format de l'identificateur unique de l'utilisateur.
SingleSignOnService : URL qui a utilisé l'authentification unique.
SingleLogoutService : URL qui a utilisé la déconnexion unique.
Location : URL de la liaison.
Binding : type de réponse de la liaison.
index : index de la liaison.
isDefault : s'il s'agit du service de liaison par défaut pour ce processus.
Demande d'authentification
<samlp:AuthnRequest
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
ID="…"
Version="2.0"
IssueInstant="2015-01-31T06:00:00"
AssertionConsumerServiceIndex="0"
ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST">
<saml:Issuer>www.workloud.com</saml:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">...</ds:Signature>
</samlp:AuthnRequest>
ID : identificateur de la demande d'authentification.
Issuer : identificateur des émetteurs (fournisseur de services).
Signature : signature de l'émetteur pour vérifier la validité de la demande, si le fichier XML est signé.
AssertionConsumerServiceIndex : index avec lequel le fournisseur d'identité retourne l'assertion après l'identification de l'utilisateur.
AssertionConsumerServiceURL : URL avec laquelle le fournisseur d'identité retourne l'assertion après l'identification de l'utilisateur.
ProtocolBinding : type de réponse que l'assertion doit renvoyer.
Assertion
Voici un exemple d'assertion.
<saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" Version="2.0" IssueInstant="2015-01-31T12:00:00Z">
<saml:Issuer>www.workloud.com</saml:Issuer> <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">...</ds:Signature>
<saml:Subject>
<saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"> cloudroll@example.com</saml:NameID>
</saml:Subject>
<saml:Conditions NotBefore="2015-01-31T12:00:00Z" NotOnOrAfter="2015-01-31T12:00:00Z"> </saml:Conditions>
<saml:AuthnStatement
AuthnInstant="2004-12-05T09:22:00"
SessionIndex="b07b804c-7c29-ea16-7300-4f3d6f7928ac">
<saml:AuthnContext>
<saml:AuthnContextClassRef>
urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
</saml:AuthnContextClassRef>
</saml:AuthnContext>
</saml:AuthnStatement>
<saml:AttributeStatement>
<saml:Attribute NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" Name="urn:oid:1.3.6.1.4.1.5923.1.1.1.1" FriendlyName="eduPersonAffiliation">
<saml:AttributeValue>admin</saml:AttributeValue>
</saml:Attribute> </saml:AttributeStatement>
</saml:Assertion>
L'assertion comprend les éléments suivants :
Issuer : identificateur des émetteurs (fournisseur d'identité).
Signature : signature de l'émetteur pour vérifier la validité de la demande, si le fichier XML est signé.
Subject : identificateur de l'utilisateur.
AuthnStatement : revendication qui décrit l'identité de l'utilisateur.
Conditions : décrit les conditions de validité de l'assertion.
AuthnInstant : moment où l'assertion a été émise.
SessionIndex : index de session par lequel l'utilisateur est identifié par le fournisseur d'identité.
AuthnContext : contexte d'authentification utilisé par le fournisseur d'identité pour identifier l'utilisateur.
AttributeStatement : inclut les attributs utilisateur.
Name : nom de l'attribut.
FriendlyName : nom convivial de l'attribut.
LogoutRequest
<samlp:LogoutRequest
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
ID="..."
Version="2.0" IssueInstant="2014-07-18T01:13:06Z"
Destination="www.workloud.com/SingleLogoutService">
<saml:Issuer>www.workloud. com </saml:Issuer>
<saml:NameID SPNameQualifier="www.workloud. com " Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">......</saml:NameID>
</samlp:LogoutRequest>
ID : identificateur de la demande d'authentification.
Issuer : identificateur des émetteurs (fournisseur de services).
Signature : signature de l'émetteur pour vérifier la validité de la demande, si le fichier XML est signé.
IssueInstant : moment où la réponse de déconnexion a été émise.
Destination : service Web qui consomme la demande.
InResponseTo : identificateur de la demande à laquelle appartient la réponse.
NameID : identificateur de l'utilisateur auquel appartient la demande.
LogoutResponse
<samlp:LogoutResponse
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
ID="...."
Version="2.0"
IssueInstant="2014-07-18T01:13:06Z"
Destination="www.workloud.gr/SingleLogoutService"
InResponseTo="...">
<saml:Issuer>www.workloud.gr</saml:Issuer>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
</samlp:Status>
</samlp:LogoutResponse>
ID : identificateur de la demande d'authentification.
Issuer : identificateur des émetteurs (fournisseur de services).
Signature : signature de l'émetteur pour vérifier la validité de la demande, si le fichier XML est signé.
IssueInstant : moment où la réponse de déconnexion a été émise.
Destination : service Web qui consomme la réponse.
InResponseTo : identificateur de la demande à laquelle appartient la réponse.
Status : état de la réponse.
Flux de travail de connexion Web
- Accédez à la page de connexion SAML.
- Sélectionnez le domaine et appuyez sur login (connexion).
- L'application crée un formulaire d'envoi automatique contenant ces paramètres.
- RelayState est un paramètre qui est transmis au fournisseur d'identité et qui doit être repassé à notre fournisseur de services tel quel. Ce paramètre garde le nom de domaine requis par notre fournisseur de services.
Exemple de valeur pour RelayState : url=/Default.aspx&dmn=demo - SAMLRequest contient l'AuthnRequest codée en Base64. Cette valeur contient des informations sur l'émetteur de la demande.
- RelayState est un paramètre qui est transmis au fournisseur d'identité et qui doit être repassé à notre fournisseur de services tel quel. Ce paramètre garde le nom de domaine requis par notre fournisseur de services.
- L'utilisateur est redirigé vers le fournisseur de services.
- Le fournisseur valide la demande d'authentification.
- Il invite l'utilisateur à se connecter.
- Le fournisseur d'identité émet une assertion avec les informations de l'utilisateur.
- L'utilisateur est redirigé vers le gestionnaire de consommateur d'assertions d'Indeavor avec les attributs SAMLResponse et RelayState de la demande SAML.
- Le gestionnaire de consommateur d'assertions valide la demande (signature, expiré, etc.).
- Il extrait le UserName pour les attributs d'assertion.
- L'utilisateur se connecte.
Flux de travail de connexion mobile
- L'utilisateur accède à la vue de connexion.
- Sélectionnez le domaine et appuyez sur login (connexion).
- L'application crée une URL contenant ces paramètres.
- RelayState est un paramètre qui est transmis au fournisseur d'identité et qui doit être repassé à notre fournisseur de services tel quel. Ce paramètre garde le nom de domaine requis par notre fournisseur de services.
Exemple de valeur pour RelayState : url=/Default.aspx&dmn=demo - SAMLRequest contient l'AuthnRequest codée en Base64. Cette valeur contient des informations sur l'émetteur de la demande.
- RelayState est un paramètre qui est transmis au fournisseur d'identité et qui doit être repassé à notre fournisseur de services tel quel. Ce paramètre garde le nom de domaine requis par notre fournisseur de services.
- L'application mobile ouvre une vue Web avec l'URL générée.
- L'utilisateur est redirigé vers le fournisseur de services.
- Le fournisseur valide la demande d'authentification.
- Il invite l'utilisateur à se connecter.
- Le fournisseur d'identité émet une assertion avec les informations de l'utilisateur.
- L'utilisateur est redirigé vers le gestionnaire de consommateur d'assertions d'Indeavor avec les attributs SAMLResponse et RelayState de la demande SAML.
- Le gestionnaire de consommateur d'assertions valide la demande (signature, expiré, etc.).
- Il extrait le UserName pour les attributs d'assertion.
- L'utilisateur se connecte.