{"id":23255,"date":"2021-03-25T13:26:38","date_gmt":"2021-03-25T17:26:38","guid":{"rendered":"https:\/\/canarie.machinedev.ca\/?post_type=document&#038;p=23255"},"modified":"2021-07-30T14:57:33","modified_gmt":"2021-07-30T18:57:33","slug":"fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth","status":"publish","type":"document","link":"https:\/\/www.canarie.ca\/fr\/document\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\/","title":{"rendered":"FCA &#8211; Comment se connecter \u00e0 Azure AD en utilisant la procuration SAML dans l\u2019IdP Shibboleth"},"content":{"rendered":"\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Avertissement&nbsp;: Vous trouverez la version la plus r\u00e9cente de ce guide technique dans le&nbsp;<a href=\"https:\/\/wiki.shibboleth.net\/confluence\/display\/KB\/Using+SAML+Proxying+in+the+Shibboleth+IdP+to+connect+with+Azure+AD\" target=\"_blank\" rel=\"noreferrer noopener\">Wiki<\/a>&nbsp;de Shibboleth. Sa version fran\u00e7aise sera actualis\u00e9e \u00e0 intervalles r\u00e9guliers.<\/p><\/blockquote>\n\n\n\n<h1 class=\"wp-block-heading\">Table des mati\u00e8res<\/h1>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"#h1\">Aper\u00e7u<\/a><\/li><li><a href=\"#h2\">Procuration de l\u2019IdP : aspect et perspectives<\/a><\/li><li><a href=\"#h3\">Procuration de l\u2019IdP : \u00e0 quoi ressemble le flux de proxys?<\/a><\/li><li><a href=\"#h4\">Mettre la solution en place<\/a><\/li><li><a href=\"#h5\">1<sup>re<\/sup>\u00a0\u00e9tape. \u00c9tablir un lien de confiance entre l\u2019IdP d\u2019Azure AD et l\u2019IdP Shibboleth<\/a><ul><li><a href=\"#h6\">1<sup>re<\/sup>\u00a0t\u00e2che : mettez \u00e0 jour les m\u00e9tadonn\u00e9es de l\u2019IdP<\/a><\/li><li><a href=\"#h7\">2<sup>e<\/sup>\u00a0t\u00e2che : enregistrez votre IdP dans Azure AD<\/a><\/li><li><a href=\"#h8\">3<sup>e<\/sup>\u00a0t\u00e2che : enregistrez localement les m\u00e9tadonn\u00e9es de l\u2019IdP en amont<\/a><\/li><li><a href=\"#h9\">4<sup>e<\/sup>\u00a0t\u00e2che : configurez la diffusion des attributs d\u2019Azure AD en fonction de l\u2019IdP Shibboleth<\/a><\/li><\/ul><\/li><li><a href=\"#h10\">2<sup>e<\/sup>\u00a0\u00e9tape. Configurer l\u2019IdP pour qu\u2019il se comporte comme un IdP de procuration<\/a><ul><li><a href=\"#h11\">1<sup>re<\/sup>\u00a0t\u00e2che : changez le processus d\u2019authentification de l\u2019IdP pour l\u2019authentification SAML<\/a><\/li><li><a href=\"#h12\">2<sup>e<\/sup>\u00a0t\u00e2che : actualisez le filtre des attributs<\/a><\/li><li><a href=\"#h13\">3<sup>e<\/sup>\u00a0t\u00e2che : amenez l\u2019IdP \u00e0 accepter les revendications d\u2019Azure AD<\/a><\/li><li><a href=\"#h14\">4<sup>e<\/sup>\u00a0t\u00e2che : proc\u00e9dez \u00e0 la mise en forme canonique de l\u2019objet<\/a><\/li><li><a href=\"#h15\">5<sup>e<\/sup>\u00a0t\u00e2che : configurez la r\u00e9solution passe-syst\u00e8me ou hybride des attributs<\/a><\/li><\/ul><\/li><li><a href=\"#h16\">Essai\u00a0<\/a><\/li><li><a href=\"#h17\">Documentation \/ Lectures recommand\u00e9es<\/a><\/li><\/ul>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"h1\">Aper\u00e7u<\/h1>\n\n\n\n<p>La configuration de l\u2019IdP Shibboleth propos\u00e9e ici tire parti des possibilit\u00e9s de procuration de la norme SAML pour \u00e9tablir la connexion avec Azure AD tout en laissant Shibboleth prendre en charge les fonctionnalit\u00e9s recherch\u00e9es par de nombreux mod\u00e8les de confiance de la f\u00e9d\u00e9ration R\u2011E. Gr\u00e2ce \u00e0 cette approche, l\u2019IdP ne sert que de proxy SAML sans qu\u2019on doive y ajouter d\u2019autres \u00e9l\u00e9ments.<\/p>\n\n\n\n<p>Nous examinerons deux approches en mati\u00e8re de procuration :<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>une procuration passe-syst\u00e8me compl\u00e8te dont le jeu d\u2019attributs se borne aux attributs d\u2019Azure AD;<\/li><li>une procuration hybride supposant l\u2019usage des attributs d\u2019Azure AD et d\u2019autres attributs du protocole LDAP, y compris ceux de l\u2019Active Directory local.<\/li><\/ol>\n\n\n\n<p>Les \u00e9tapes d\u00e9crites dans ce document peuvent s\u2019appliquer \u00e0 l\u2019installation de n\u2019importe quel IdP. Elles pr\u00e9sument toutefois que la version 4.0.1 de la plateforme IdP est en place. Lors des essais de configuration, on s\u2019est servi du conteneur&nbsp;<a href=\"https:\/\/spaces.at.internet2.edu\/display\/ITAP\/InCommon+Trusted+Access+Platform+Release\" target=\"_blank\" rel=\"noreferrer noopener\">Internet2 Trusted Access Platform<\/a>&nbsp;de l\u2019IdP, qui a pris en charge certaines t\u00e2ches parmi les plus laborieuses (par exemple, le serveur Web, la version de Java et l\u2019externalisation de la configuration).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Public vis\u00e9<\/h2>\n\n\n\n<p>La configuration suppose une certaine connaissance de l\u2019IdP Shibboleth et de son architecture, ainsi que de la fa\u00e7on d\u2019installer et de maintenir des logiciels. Les \u00e9tapes d\u00e9crites sont valables pour n\u2019importe quel type de plateforme et devraient fonctionner avec les versions Windows et Unix de l\u2019IdP.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O\u00f9 proc\u00e9der \u00e0 l\u2019installation<\/h2>\n\n\n\n<p>La configuration peut s\u2019appliquer \u00e0 un IdP local ou en nuage. L\u2019emplacement de l\u2019IdP peut d\u00e9pendre de l\u2019endroit o\u00f9 se trouvent les donn\u00e9es. \u00c0 moins que vous ne gardiez toutes vos donn\u00e9es dans Azure AD, sans doute opterez-vous pour l\u2019approche hybride qui combine les attributs d\u2019Azure AD et ceux habituellement r\u00e9solus par l\u2019IdP Shibboleth.<\/p>\n\n\n\n<p><em>Remarque&nbsp;:<\/em>&nbsp;Cette nouvelle fonctionnalit\u00e9 de procuration SAML d\u00e9rive de l\u2019adoption de plus en plus grande de services en nuage qui ne satisfont pas naturellement \u00e0 tous les besoins du milieu R\u2011E. L\u2019id\u00e9e est de parvenir \u00e0 un \u00e9quilibre entre la solution que propose le fournisseur et les exigences du milieu R-E concernant l\u2019interop\u00e9rabilit\u00e9 entre ses membres.<\/p>\n\n\n\n<p><em>Remerciements&nbsp;:<\/em>&nbsp;Nous remercions&nbsp;<a href=\"https:\/\/wiki.shibboleth.net\/confluence\/display\/~fdc866bw7u1ceq78tuddn4mxg5y%3D@https%3A%2F%2Fidp.jisc.ac.uk%2Fidp%2Fshibboleth\">Matthew Slowe<\/a>, l\u2019\u00e9quipe de Shibboleth et d\u2019autres pour leurs conseils avis\u00e9s et leur participation \u00e0 la r\u00e9daction de ce document.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h2\">Procuration de l\u2019IdP&nbsp;: aspect et perspectives<\/h2>\n\n\n\n<p>Il arrive que les techniques de procuration s\u00e8ment la confusion. C\u2019est pourquoi il vaut la peine de prendre un moment pour bien saisir l\u2019approche et la remettre en perspective:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Azure AD<\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li>Pour Azure AD, l\u2019IdP Shibboleth V4 ressemble \u00e0 une \u00ab&nbsp;partie de confiance&nbsp;\u00bb.<\/li><li>En d\u2019autres termes, il aura l\u2019aspect d\u2019une application&nbsp;<strong>unique&nbsp;<\/strong>ne figurant pas dans la galerie du portail Enterprise Apps.<ul><li>L\u2019acc\u00e8s conditionnel et les r\u00e8gles s\u2019appliquent donc \u00e0 tout l\u2019IdP,&nbsp;<strong>PAS<\/strong>&nbsp;\u00e0 chaque partie de confiance de Shibboleth.<\/li><li>Ceci signifie \u00e9galement que les r\u00e8gles de l\u2019authentification multifacteur (MFA) que&nbsp;<em>contr\u00f4le Azure AD<\/em>&nbsp;sont valables pour l\u2019IdP au complet, PLUT\u00d4T que pour telle ou telle partie de confiance de Shibboleth.<\/li><\/ul><\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Partie de confiance (fournisseur de services) de la collectivit\u00e9 R-E\/du groupe de confiance multilat\u00e9ral<\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li>Elle prendra la forme d\u2019un IdP enti\u00e8rement fonctionnel acceptant la multilat\u00e9ralit\u00e9.<\/li><li>Elle ne n\u00e9cessitera aucune modification \u00e0 la mani\u00e8re dont se comporte le fournisseur de services (SP).<\/li><li>Les attributs confirm\u00e9s \u00e0 la connexion correspondent \u00e0 ceux auxquels s\u2019attend le SP (\u00e0 savoir, ils ne seront PAS per\u00e7us comme des \u00ab&nbsp;revendications&nbsp;\u00bb).<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Utilisateur<\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li>L\u2019utilisateur se connectera \u00e0 Azure AD.<\/li><li>En tant qu\u2019agent de procuration (proxy), l\u2019IdP Shibboleth redirigera la connexion s\u2019il y a lieu de le faire.<\/li><li>En r\u00e9alit\u00e9, l\u2019utilisateur ouvrira deux s\u00e9ances&nbsp;:<ul><li>la premi\u00e8re sur Azure AD;<\/li><li>la seconde sur l\u2019IdP Shibboleth.<\/li><\/ul><\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Exploitant de la f\u00e9d\u00e9ration<\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li>L\u2019entit\u00e9 inscrite \u00e0 la f\u00e9d\u00e9ration R-E est l\u2019IdP Shibboleth. Celui-ci a \u00e9t\u00e9 con\u00e7u par et pour les membres du milieu R-E. Il devrait donc en respecter toutes les exigences techniques, comme le ferait n\u2019importe quel IdP Shibboleth.<\/li><li>Cette harmonisation avec les attentes fondamentales de la f\u00e9d\u00e9ration ne se borne pas aux logiciels, mais aussi \u00e0 la mani\u00e8re dont on g\u00e8re et utilise ceux-ci. L\u2019exploitant de l\u2019IdP en garde le contr\u00f4le, comme il le ferait pour n\u2019importe quel IdP.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h3\">Procuration de l\u2019IdP&nbsp;: \u00e0 quoi ressemble le flux de proxys?<\/h2>\n\n\n\n<p>Voici ce qui se produit habituellement quand l\u2019utilisateur \u00e9tablit la connexion.<\/p>\n\n\n\n<p>1. L\u2019IdP Shibboleth re\u00e7oit une demande d\u2019authentification.<\/p>\n\n\n\n<p>2. Il d\u00e9termine si la configuration correspond \u00e0 celle d\u2019une connexion SAML et la relaie \u00e0 un IdP en amont (Azure AD). Les param\u00e8tres correspondants se trouvent dans :<\/p>\n\n\n\n<p>a. properties<br>b. authn\/saml-authn-config.xml<\/p>\n\n\n\n<p>3. L\u2019identit\u00e9 de l\u2019utilisateur est confirm\u00e9e ou celui-ci est connect\u00e9 \u00e0 un IdP en amont (Azure AD).<\/p>\n\n\n\n<p>4. L\u2019IdP en amont (Azure AD) g\u00e9n\u00e8re une assertion SAML avec un ou plusieurs attributs, puis la transmet \u00e0 l\u2019IdP Shibboleth avec l\u2019utilisateur.<\/p>\n\n\n\n<p>5. L\u2019IdP Shibboleth re\u00e7oit l\u2019assertion.<\/p>\n\n\n\n<p>a. Il s\u2019assure qu\u2019elle \u00e9mane bien d\u2019une entit\u00e9 fiable, configur\u00e9e dans metadata-providers.xml.<br>b. Il applique \u00e0 l\u2019assertion les r\u00e8gles \u00e9tablies dans attribute-filter.xml.<br>c. Il en extrait l\u2019utilisateur r\u00e9el, conform\u00e9ment \u00e0 ce qui a \u00e9t\u00e9 configur\u00e9 dans&nbsp;<a href=\"https:\/\/wiki.shibboleth.net\/confluence\/display\/IDP4\/AttributePostLoginC14NConfiguration\" target=\"_blank\" rel=\"noreferrer noopener\">attribute-based subject c14n<\/a>.<\/p>\n\n\n\n<p>i. Il parcourt la liste d\u2019attributs du r\u00e9solveur dans AttributesToResolve et v\u00e9rifie chacun d\u2019eux.<br>ii. Il compare les attributs r\u00e9sultants \u00e0 ceux dans AttributeSourceIds et s\u00e9lectionne le premier valable comme nom principal dont il se servira plus tard.<\/p>\n\n\n\n<p>d. Le nom d\u2019utilisateur&nbsp;<em>r\u00e9el<\/em>&nbsp;fiable obtenu sert de $resolutionContext.principal (c.-\u00e0-d. de connecteur LDAP pour la transmission des donn\u00e9es, etc.) lors du processus \u00ab&nbsp;normal&nbsp;\u00bb de r\u00e9solution des attributs.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"h4\">Mettre la solution en place<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00e9requis<\/h2>\n\n\n\n<p>Vous devrez disposer de ce qui suit et y avoir acc\u00e8s avant de d\u00e9buter.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Un fournisseur d\u2019identit\u00e9s (IdP) de version quatre (V4) ou plus r\u00e9cente fonctionnel, activ\u00e9 quelque part.<\/li><li>Un locataire d\u2019Azure AD dont vous avez le contr\u00f4le en tant qu\u2019administrateur.<\/li><li>La capacit\u00e9 de cr\u00e9er une application SAML pour entreprise ne figurant pas dans la galerie avec Azure AD.<\/li><li>Un attribut convenable dont les deux IdP pourront se servir pour proc\u00e9der aux v\u00e9rifications locales, s\u2019il y a lieu.<\/li><\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Terminologie et param\u00e8tres<\/h2>\n\n\n\n<p>Cette partie pr\u00e9sente quelques expressions et param\u00e8tres importants mentionn\u00e9s ailleurs dans le document. Il est pr\u00e9f\u00e9rable de garder ces \u00e9l\u00e9ments \u00e0 port\u00e9e de la main pour acc\u00e9l\u00e9rer la configuration.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>L\u2019identifiant (EntityID) de l\u2019IdP d\u2019origine&nbsp;:&nbsp;<\/strong>https:\/\/idp.example.com\/idp<\/li><li><strong>L\u2019identifiant (EntityID) de l\u2019IdP en amont, c\u2019est-\u00e0-dire celui d\u2019Azure&nbsp;:<\/strong>&nbsp;https:\/\/sts.windows.net\/&lt;sts_tenant_id&gt;\/<ul><li>La mani\u00e8re la plus simple de trouver sts_tenant_id consiste \u00e0 cr\u00e9er une partie de confiance avec laquelle vous travaillerez dans Azure AD&nbsp;:<ul><li>connectez-vous au portail d\u2019Azure AD &gt; s\u00e9lectionnez Enterprise Applications &gt; Create New Application&nbsp;&gt; Non Gallery Application&gt; cr\u00e9ez une application&nbsp;&gt; s\u00e9lectionnez SAML Sign&nbsp;On&nbsp;&gt; puis SAML Sign&nbsp;On Settings<\/li><li>l\u2019identifiant d\u2019Azure AD se trouve \u00e0 la partie&nbsp;4 (inclure le trait oblique).<\/li><\/ul><\/li><li><strong>L\u2019attribut de procuration qui unit<\/strong>&nbsp;les deux services&nbsp;:<ul><li>SamAccountName est souvent un bon choix. L\u2019attribut comprend souvent le suffixe \u00ab&nbsp;name&nbsp;\u00bb dans les revendications.<ul><li>Il prendra la forme d\u2019un nom d\u2019utilisateur \u00e9tendu.<\/li><li>L\u2019extension correspond au domaine de l\u2019organisation et est habituellement conviviale pour l\u2019Internet (pas quelquechose.local ou quelquechose.int).<\/li><\/ul><\/li><li><strong>Partie de confiance<\/strong><strong>\/Fournisseur de services&nbsp;:<\/strong>&nbsp;Microsoft utilise parfois \u00ab&nbsp;partie de confiance&nbsp;\u00bb comme synonyme de \u00ab&nbsp;fournisseur de services&nbsp;\u00bb.<\/li><\/ul><\/li><\/ul><\/li><\/ul>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"h5\">\u00c9tapes et t\u00e2ches<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">1<sup>re<\/sup>&nbsp;\u00e9tape. \u00c9tablir un lien de confiance entre l\u2019IdP d\u2019Azure AD et l\u2019IdP Shibboleth<\/h2>\n\n\n\n<p>Trois configurations principales doivent \u00eatre modifi\u00e9es.<\/p>\n\n\n\n<p><strong>Dans l\u2019IdP Shibboleth&nbsp;:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Les m\u00e9tadonn\u00e9es doivent inclure SPSSODescriptor, au cas o\u00f9 on r\u00e9cup\u00e8rerait les m\u00e9tadonn\u00e9es de l\u2019IdP par l\u2019URL.<\/li><li>Les m\u00e9tadonn\u00e9es doivent comprendre une entr\u00e9e pour l\u2019IdP d\u2019Azure AD afin qu\u2019on puisse configurer le fournisseur de m\u00e9tadonn\u00e9es.<\/li><\/ol>\n\n\n\n<p><strong>Dans Azure AD&nbsp;:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\"><li>\u00c9tablir le lien entre Azure AD et l\u2019IdP Shibboleth au moyen d\u2019une partie de confiance.<\/li><\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h6\">1<sup>re<\/sup>&nbsp;t\u00e2che&nbsp;: mettez \u00e0 jour les m\u00e9tadonn\u00e9es de l\u2019IdP<\/h3>\n\n\n\n<p>Puisque votre IdP assumera le r\u00f4le d\u2019un SP (fournisseur de services), vous devrez ajouter des blocs aux m\u00e9tadonn\u00e9es de l\u2019entit\u00e9.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Mettez \u00e0 jour le fichier idp-metadata.xml pour qu\u2019il inclue un bloc &lt;SPSSODescriptor&gt;.<\/li><li>Copiez les certificats de signature et d\u2019encryptage dans les m\u00e9tadonn\u00e9es de l\u2019IdP et remplacez l\u2019URI de base (https:\/\/idp.example.com\/idp) par celui de votre IdP.<\/li><\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;EntityDescriptor entityID=\"https:\/\/idp.example.com\/idp\" ...&gt;\n\n \n\n&lt;!\u2014Existe d\u00e9j\u00e0 dans les donn\u00e9es de l\u2019IdP --&gt;\n\n&lt;IDPSSODescriptor ...&gt;\n\n...\n\n&lt;\/IDPSSODescriptor&gt;\n\n \n\n&lt;AttributeAuthorityDescriptor&gt;\n\n...\n\n&lt;\/AttributeAuthorityDescriptor&gt;\n\n \n\n \n\n&lt;!\u2014Nouveau bloc SP --&gt;\n\n&lt;SPSSODescriptor protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\"&gt;\n\n \n\n&lt;KeyDescriptor use=\"signing\"&gt;\n\n&lt;ds:KeyInfo&gt;\n\n&lt;ds:X509Data&gt;\n\n&lt;ds:X509Certificate&gt;\n\n...Signing Certificate from IdP...\n\n&lt;\/ds:X509Certificate&gt;\n\n&lt;\/ds:X509Data&gt;\n\n&lt;\/ds:KeyInfo&gt;\n\n&lt;\/KeyDescriptor&gt;\n\n&lt;KeyDescriptor use=\"encryption\"&gt;\n\n&lt;ds:KeyInfo&gt;\n\n&lt;ds:X509Data&gt;\n\n&lt;ds:X509Certificate&gt;\n\n...Encryption Certificate from IdP...\n\n&lt;\/ds:X509Certificate&gt;\n\n&lt;\/ds:X509Data&gt;\n\n&lt;\/ds:KeyInfo&gt;\n\n&lt;\/KeyDescriptor&gt;\n\n \n\n&lt;AssertionConsumerService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" Location=\"https:\/\/idp.example.com\/idp\/profile\/Authn\/SAML2\/POST\/SSO\" index=\"0\"\/&gt;\n\n&lt;\/SPSSODescriptor&gt;\n\n \n\n&lt;\/EntityDescriptor&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h7\">2<sup>e<\/sup>&nbsp;t\u00e2che&nbsp;: enregistrez votre IdP dans Azure AD<\/h3>\n\n\n\n<p>Vous devez cr\u00e9er une application d\u2019entreprise du genre \u00ab&nbsp;application ne figurant pas dans la galerie&nbsp;\u00bb dans Azure AD, puis la configurer pour qu\u2019elle accepte le standard SAML.<\/p>\n\n\n\n<p>\u00c9tapes<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Ouvrir une s\u00e9ance sur le portail Azure AD &gt; s\u00e9lectionner Enterprise Applications &gt; New Application &gt; Application ne figurant pas dans la galerie &gt; la cr\u00e9er&nbsp;&gt; s\u00e9lectionner SAML Sign&nbsp;On &gt; puis SAML Sign&nbsp;On Settings<\/li><\/ul>\n\n\n\n<p>Une fois l\u2019application cr\u00e9\u00e9e, les deux \u00e9l\u00e9ments que voici devront \u00eatre modifi\u00e9s dans la partie \u00ab&nbsp;Configuration SAML de base&nbsp;\u00bb&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>l\u2019identificateur (ID d\u2019entit\u00e9)&nbsp;:&nbsp;<a href=\"https:\/\/idp.example.com\/idp\/shibboleth\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/idp.example.com\/idp\/shibboleth<\/a>&nbsp;(il devrait \u00eatre le m\u00eame que celui de l\u2019IdP);<\/li><li>l\u2019URL de r\u00e9ponse (Assertion Consumer Service)&nbsp;:&nbsp;<a href=\"https:\/\/idp.example.ac.uk\/idp\/profile\/Authn\/SAML2\/POST\/SSO\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/idp.example.com\/idp\/profile\/Authn\/SAML2\/POST\/SSO<\/a>.<\/li><\/ul>\n\n\n\n<p>On pourra ajouter d\u2019autres \u00e9l\u00e9ments comme l\u2019URL de d\u00e9connexion, mais puisque Shibboleth n\u2019en tiendra pas compte, il est pr\u00e9f\u00e9rable de s\u2019en abstenir.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"871\" src=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/Configuration-SAML-de-base-768x871-1.png\" alt=\"\" class=\"wp-image-19664\" srcset=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/Configuration-SAML-de-base-768x871-1.png 768w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/Configuration-SAML-de-base-768x871-1-265x300.png 265w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\">Ne fermez pas l\u2019\u00e9diteur de la partie de confiance, vous en aurez besoin pour l\u2019\u00e9tape suivante.<\/h5>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h8\">3<sup>e<\/sup>&nbsp;t\u00e2che&nbsp;: enregistrez localement les m\u00e9tadonn\u00e9es de l\u2019IdP en amont<\/h3>\n\n\n\n<p>L\u2019IdP Shibboleth ne conna\u00eet pas l\u2019IdP d\u2019Azure AD, donc vous devez l\u2019ajouter localement. Pour cela, proc\u00e9dez comme vous le feriez pour n\u2019importe quelle autre m\u00e9tadonn\u00e9e. L\u2019information peut \u00eatre ajout\u00e9e \u00e0 votre&nbsp;<em>metadata-providers.xml<\/em>&nbsp;comme s\u2019il s\u2019agissait d\u2019un nouveau &lt;MetadataProvider&gt;.<\/p>\n\n\n\n<p>Exemple :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;MetadataProvider id=\"AzureAD-idp-metadata\"\n\nxsi:type=\"FilesystemMetadataProvider\"\n\nmetadataFile=\"\/opt\/idp\/metadata\/AzureAD-idp.xml\" \/&gt;<\/code><\/pre>\n\n\n\n<p>Le fichier AzureAD-idp.xml doit inclure un SML2 xml valable pour l\u2019identifiant d\u2019entit\u00e9 du locataire incluant ce qui suit :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>un bloc IDPSSODescriptor comprenant un \u00e9l\u00e9ment shibmd:scope saisi manuellement;<\/li><li>un \u00e9l\u00e9ment X509Descriptor avec use=signing;<\/li><li>deux \u00e9l\u00e9ments SingleSignOnService;<\/li><li>un \u00e9l\u00e9ment SingleLogOut (pour le renvoi des erreurs \u00e0 Azure).<\/li><\/ul>\n\n\n\n<p>La fa\u00e7on la plus simple de proc\u00e9der consiste \u00e0 cliquer \u00ab&nbsp;XML de m\u00e9tadonn\u00e9es de f\u00e9d\u00e9ration&nbsp;\u00bb dans les informations sur la partie de confiance d\u2019Azure AD (troisi\u00e8me partie). Cependant, une certaine \u00e9puration est requise pour obtenir une version plus l\u00e9g\u00e8re des m\u00e9tadonn\u00e9es.<\/p>\n\n\n\n<p><strong>Astuce&nbsp;<\/strong>: ceux qui utilisent un ordinateur Mac ou Unix trouveront sans doute plus commode de faire transiter le fichier par xmllint -format downloadedfile.xml &gt; downloadedfile-formated.xml<\/p>\n\n\n\n<p>Modifier les m\u00e9tadonn\u00e9es qui ont \u00e9t\u00e9 t\u00e9l\u00e9charg\u00e9es en ajoutant \u00e0 la fois le NameSpace en XML et une valeur pour shibmd:scope dans le bloc IDPSSODescriptor.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Ajouter ce qui suit \u00e0 EntityDescriptor, dans les m\u00e9tadonn\u00e9es qui ont \u00e9t\u00e9 t\u00e9l\u00e9charg\u00e9es : xmlns:shibmd=\u00a0\u00bburn:mace:shibboleth:metadata:1.0<\/li><li>Ajouter l\u2019\u00e9l\u00e9ment Extensions dans le bloc IDPSSODescriptor pour qu\u2019il y ait concordance avec la port\u00e9e valid\u00e9e selon la r\u00e8gle Proxy Task 2 ci-dessous :<\/li><\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;Extensions&gt;\n&lt;shibmd:Scope regexp=\"false\"&gt;your_scope_domain.here&lt;\/shibmd:Scope&gt;\n&lt;\/Extensions&gt;<\/code><\/pre>\n\n\n\n<p>Quand vous aurez termin\u00e9, ajoutez une entr\u00e9e \u00e0&nbsp;<em>metadata-providers.xml.<\/em>&nbsp;Si vous la r\u00e9cup\u00e9rez d\u2019ailleurs ou recourez \u00e0 un autre moyen (par ex., cURL ou autrement), assurez-vous de bien en conna\u00eetre l\u2019origine et ne lui accordez pas une confiance aveugle. Effectuez d\u2019abord les v\u00e9rifications qui s\u2019imposent.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"476\" src=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/signature-SAML-768x476-1.png\" alt=\"\" class=\"wp-image-19666\" srcset=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/signature-SAML-768x476-1.png 768w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/signature-SAML-768x476-1-300x186.png 300w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<p><strong>Remarque<\/strong><\/p>\n\n\n\n<p><strong>Au sujet des certificats<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Le certificat produit par Azure AD n\u2019est valable que trois ans et ne cr\u00e9e un lien de confiance qu\u2019entre Azure et le proxy Shibboleth.<\/li><li>Attendez-vous \u00e0 ce que ce lien se rompe \u00e0 l\u2019expiration du certificat.<\/li><li>Pr\u00e9voyez aussi que l\u2019\u00e9quipe qui administre l\u2019IdP devra effectuer le transfert de certificat entre Azure AD et votre instance de l\u2019IdP.<\/li><\/ul>\n\n\n\n<p><strong>Au sujet du t\u00e9l\u00e9chargement des m\u00e9tadonn\u00e9es<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Il n\u2019y a pas de changement de ligne entre les lignes.<\/li><li>Les m\u00e9tadonn\u00e9es contiennent des \u00e9l\u00e9ments superflus qu\u2019on peut retrancher pour r\u00e9duire la taille du fichier, \u00e0 savoir&nbsp;:<ul><li>la signature qui appara\u00eet au d\u00e9but du fichier;<\/li><li>la partie Fed:ClaimTypesOffered.<\/li><\/ul><\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h9\">4<sup>e<\/sup>&nbsp;t\u00e2che&nbsp;: configurez la diffusion des attributs d\u2019Azure AD en fonction de l\u2019IdP Shibboleth<\/h3>\n\n\n\n<p>Dans l\u2019\u00e9diteur de la partie de confiance, configurez les attributs dont l\u2019IdP Shibboleth aura besoin pour fonctionner.<\/p>\n\n\n\n<p><strong>Pour une procuration passe-syst\u00e8me<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Les attributs \u00e9manent tous d\u2019Azure AD et doivent \u00eatre diffus\u00e9s \u00e0 la partie de confiance pour que l\u2019IdP Shibboleth puisse g\u00e9rer les donn\u00e9es en aval.<\/li><\/ul>\n\n\n\n<p><strong>Pour une procuration hybride<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Techniquement, vous n\u2019aurez besoin que de l\u2019attribut servant \u00e0 authentifier l\u2019utilisateur.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"702\" height=\"190\" src=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/attributs.png\" alt=\"\" class=\"wp-image-19668\" srcset=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/attributs.png 702w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/attributs-300x81.png 300w\" sizes=\"auto, (max-width: 702px) 100vw, 702px\" \/><\/figure>\n\n\n\n<p><strong>Remarque&nbsp;:&nbsp;<\/strong>user.userprincipalname est l\u2019identifiant principal habituellement retenu pour l\u2019utilisateur, mais examinez attentivement vos proc\u00e9dures concernant son emploi et sa r\u00e9utilisation \u00e9ventuelle, car cet aspect prend une importance capitale avec l\u2019authentification multifacteur et les attestations. Vous devez vous assurer que l\u2019identifiant est unique et ne change pas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h10\">2<sup>e<\/sup>&nbsp;\u00e9tape. Configurer l\u2019IdP pour qu\u2019il se comporte comme un IdP de procuration<\/h2>\n\n\n\n<p>Vous devrez effectuer les changements que voici pour que l\u2019IdP en devienne un de procuration.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Modifier le processus d\u2019authentification pour une authentification SAML<\/li><li>\u00c9tablir l\u2019entit\u00e9 qui prendra le flux en charge<\/li><li>Actualiser le filtre des attributs pour autoriser l\u2019ingestion passage des attributs entrants<\/li><li>Adapter l\u2019extraction des attributs par mise en forme canonique de l\u2019objet (c14n et r\u00e9solveur)<\/li><\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h11\">1<sup>re<\/sup>&nbsp;t\u00e2che&nbsp;: changez le processus d\u2019authentification de l\u2019IdP pour l\u2019authentification SAML<\/h3>\n\n\n\n<p>La modification s\u2019effectue en trois temps.<\/p>\n\n\n\n<p>1. Modifiez&nbsp;<em>authn\/saml-authn-config.xml<\/em>&nbsp;pour que EntityID corresponde \u00e0 l\u2019identifiant d\u2019entit\u00e9 d\u2019Azure AD<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>D\u00e9commentez l\u2019objet&nbsp;<strong>authn.SAML.discoveryFunction<\/strong>&nbsp;et modifiez target:<\/li><li>REMPLACEZ sts_tenant_id par votre identifiant.<\/li><\/ol>\n\n\n\n<p><strong>Remarque&nbsp;:&nbsp;<\/strong>inclure le trait oblique<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;bean id=\"shibboleth.authn.SAML.discoveryFunction\" parent=\"shibboleth.Functions.Constant\"\n\nc:target=\"https:\/\/sts.windows.net\/&lt;sts_tenant_id&gt;\/\" \/&gt;<\/code><\/pre>\n\n\n\n<p>2.&nbsp;<strong>Autorisez le passage des donn\u00e9es en modifiant&nbsp;<\/strong>authn.flows dans&nbsp;<em>idp.properties<\/em>&nbsp;pour SAML&nbsp;:<\/p>\n\n\n\n<p>idp.authn.flows=SAML<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h12\">2<sup>e<\/sup>&nbsp;t\u00e2che&nbsp;: actualisez le filtre des attributs<\/h3>\n\n\n\n<p>L\u2019IdP n\u2019ing\u00e8rera pas les attributs de l\u2019IdP Azure AD en amont si un filtre ne le permet pas.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Ajoutez une &lt;AttributeFilterPolicy&gt; pour autoriser le traitement des attributs.<\/li><li>Remplacez sts_tenant_id par votre identifiant.<\/li><\/ol>\n\n\n\n<p><strong>Remarque&nbsp;:<\/strong>&nbsp;inclure le trait oblique.<\/p>\n\n\n\n<p><strong>Remarque&nbsp;:&nbsp;<\/strong>Une r\u00e8gle ScopeMatchesShibMDScope s\u2019applique au \u00ab&nbsp;nom&nbsp;\u00bb de l\u2019attribut (appel\u00e9 azureName sur la plateforme).<\/p>\n\n\n\n<p>Cette r\u00e8gle garantit la concordance de id.properties:idp scope avec le champ d\u2019Azure AD, pour \u00e9viter les anomalies. S\u2019il y a discordance, la r\u00e8gle d\u00e9clenche une interruption qui emp\u00eachera l\u2019utilisateur de se connecter.<\/p>\n\n\n\n<p>Pour que tout fonctionne correctement, assurez-vous que les m\u00e9tadonn\u00e9es de l\u2019IdP correspondent \u00e0 la bonne plage de l\u2019IdP d\u2019Azure AD.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;AttributeFilterPolicy id=\"FilterPolicyObject-Proxy-FromAzure-byIssuer-Type\"&gt;\n\n&lt;PolicyRequirementRule xsi:type=\"Issuer\" value=\"https:\/\/sts.windows.net\/&lt;sts_tenant_id&gt;\/\" \/&gt;\n\n&nbsp;\n\n&lt;AttributeRule attributeID=\"azureDisplayname\" permitAny=\"true\" \/&gt;\n\n&lt;AttributeRule attributeID=\"azureGivenname\" permitAny=\"true\" \/&gt;\n\n&lt;AttributeRule attributeID=\"azureSurname\" permitAny=\"true\" \/&gt;\n\n&lt;AttributeRule attributeID=\"azureAuthnmethodsreferences\" permitAny=\"true\" \/&gt;\n\n&lt;AttributeRule attributeID=\"azureIdentityprovider\" permitAny=\"true\" \/&gt;\n\n&lt;AttributeRule attributeID=\"azureTenantid\" permitAny=\"true\" \/&gt;\n\n&lt;AttributeRule attributeID=\"azureEmailaddress\" permitAny=\"true\" \/&gt;\n\n&lt;AttributeRule attributeID=\"azureObjectidentifier\" permitAny=\"true\" \/&gt;\n\n&lt;AttributeRule attributeID=\"azureName\"&gt;\n\n&lt;PermitValueRule xsi:type=\"ScopeMatchesShibMDScope\" \/&gt;\n\n&lt;\/AttributeRule&gt;\n\n&lt;\/AttributeFilterPolicy&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h13\">3<sup>e<\/sup>&nbsp;t\u00e2che&nbsp;: amenez l\u2019IdP \u00e0 accepter les revendications d\u2019Azure AD<\/h3>\n\n\n\n<p>Les assertions SAML que diffuse Azure AD prennent la forme de revendications, car elles sont nomm\u00e9es selon une convention centr\u00e9e sur la f\u00e9d\u00e9ration des services Web d\u2019Azure (WS-Fed).<\/p>\n\n\n\n<p>Pour contourner l\u2019obstacle, nous ajouterons un nouveau fichier de mappage des attributs qui autorisera l\u2019analyse des revendications et leur qualification d\u2019attribut interne, afin que le r\u00e9solveur puisse les utiliser.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>S\u2019il n\u2019en existe pas d\u00e9j\u00e0 un, ajoutez \u00e0 l\u2019IdP un fichier que vous baptiserez&nbsp;<\/strong><em>attributes\/azureClaims.xml<\/em>. Vous y inclurez tous les attributs d\u2019Azure AD dont vous vous servirez avec le r\u00e9solveur.<\/li><\/ol>\n\n\n\n<p>Sans \u00eatre exhaustif, l\u2019exemple qui suit est assez d\u00e9taill\u00e9 pour que vous d\u00e9butiez avec le fichier des revendications.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Par mesure de s\u00e9curit\u00e9, on appliquera une r\u00e8gle de port\u00e9e \u00e0 azName. La plage DOIT correspondre \u00e0 l\u2019extension &lt;shibmd:Scope&gt; qui figure dans les m\u00e9tadonn\u00e9es de l\u2019IdP en amont.<\/li><li>La propri\u00e9t\u00e9 de la r\u00e8gle \u00ab&nbsp;saml2.nameFormat&nbsp;\u00bb est urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified, car les revendications ne sont pas format\u00e9es de la mani\u00e8re appropri\u00e9e.<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n\n&lt;beans xmlns=\"http:\/\/www.springframework.org\/schema\/beans\"\n\nxmlns:context=\"http:\/\/www.springframework.org\/schema\/context\"\n\nxmlns:util=\"http:\/\/www.springframework.org\/schema\/util\"\n\nxmlns:p=\"http:\/\/www.springframework.org\/schema\/p\"\n\nxmlns:c=\"http:\/\/www.springframework.org\/schema\/c\"\n\nxmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n\nxsi:schemaLocation=\"http:\/\/www.springframework.org\/schema\/beans http:\/\/www.springframework.org\/schema\/beans\/spring-beans.xsd\n\nhttp:\/\/www.springframework.org\/schema\/context http:\/\/www.springframework.org\/schema\/context\/spring-context.xsd\n\nhttp:\/\/www.springframework.org\/schema\/util http:\/\/www.springframework.org\/schema\/util\/spring-util.xsd\"\n\n&nbsp;\n\ndefault-init-method=\"initialize\"\n\ndefault-destroy-method=\"destroy\"&gt;\n\n&nbsp;\n\n&lt;bean parent=\"shibboleth.TranscodingRuleLoader\"&gt;\n\n&lt;constructor-arg&gt;\n\n&lt;list&gt;\n\n&lt;!-- claims relevant to person record --&gt;\n\n&lt;bean parent=\"shibboleth.TranscodingProperties\"&gt;\n\n&lt;property name=\"properties\"&gt;\n\n&lt;props merge=\"true\"&gt;\n\n&lt;prop key=\"id\"&gt;azureName&lt;\/prop&gt;\n\n&lt;prop key=\"transcoder\"&gt;SAML2ScopedStringTranscoder&lt;\/prop&gt;\n\n&lt;prop key=\"saml2.name\"&gt;http:\/\/schemas.xmlsoap.org\/ws\/2005\/05\/identity\/claims\/name&lt;\/prop&gt;\n\n&lt;prop key=\"saml2.nameFormat\"&gt;urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified&lt;\/prop&gt;\n\n&lt;prop key=\"displayName.en\"&gt;Name&lt;\/prop&gt;\n\n&lt;prop key=\"description.en\"&gt;Azure UPN of an account expecting to be scoped thus transcoded that way&lt;\/prop&gt;\n\n&lt;\/props&gt;\n\n&lt;\/property&gt;\n\n&lt;\/bean&gt;\n\n&lt;bean parent=\"shibboleth.TranscodingProperties\"&gt;\n\n&lt;property name=\"properties\"&gt;\n\n&lt;props merge=\"true\"&gt;\n\n&lt;prop key=\"id\"&gt;azureEmailaddress&lt;\/prop&gt;\n\n&lt;prop key=\"transcoder\"&gt;SAML2StringTranscoder&lt;\/prop&gt;\n\n&lt;prop key=\"saml2.name\"&gt;http:\/\/schemas.xmlsoap.org\/ws\/2005\/05\/identity\/claims\/emailaddress&lt;\/prop&gt;\n\n&lt;prop key=\"saml2.nameFormat\"&gt;urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified&lt;\/prop&gt;\n\n&lt;prop key=\"displayName.en\"&gt;Mail&lt;\/prop&gt;\n\n&lt;prop key=\"description.en\"&gt;Azure emailaddress field of an account&lt;\/prop&gt;\n\n&lt;\/props&gt;\n\n&lt;\/property&gt;\n\n&lt;\/bean&gt;\n\n&lt;bean parent=\"shibboleth.TranscodingProperties\"&gt;\n\n&lt;property name=\"properties\"&gt;\n\n&lt;props merge=\"true\"&gt;\n\n&lt;prop key=\"id\"&gt;azureDisplayname&lt;\/prop&gt;\n\n&lt;prop key=\"transcoder\"&gt;SAML2StringTranscoder&lt;\/prop&gt;\n\n&lt;prop key=\"saml2.name\"&gt;http:\/\/schemas.microsoft.com\/identity\/claims\/displayname&lt;\/prop&gt;\n\n&lt;prop key=\"saml2.nameFormat\"&gt;urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified&lt;\/prop&gt;<\/code><\/pre>\n\n\n\n<p>Maintenant que l\u2019IdP peut interpr\u00e9ter les revendications d\u2019Azure AD, il faut en autoriser l\u2019utilisation pour la mise en forme canonique et peupler le fichier d\u2019attributs.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h14\">4<sup>e<\/sup>&nbsp;t\u00e2che&nbsp;: proc\u00e9dez \u00e0 la mise en forme canonique de l\u2019objet<\/h3>\n\n\n\n<p>Cette t\u00e2che consiste \u00e0 prendre l\u2019assertion entrante pour en extraire des donn\u00e9es et proc\u00e9der \u00e0 la mise en forme canonique (documentation\/normalisation) du nom de l\u2019utilisateur qui se connecte \u00e0 Azure.<\/p>\n\n\n\n<p>Pour Azure&nbsp;AD, on utilisera la revendication:&nbsp;<a href=\"http:\/\/schemas.xmlsoap.org\/ws\/2005\/05\/identity\/claims\/name\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/schemas.xmlsoap.org\/ws\/2005\/05\/identity\/claims\/name<\/a>&nbsp;qui a \u00e9t\u00e9 mapp\u00e9e \u00e0 l\u2019interne dans l\u2019IdP sous la forme azName.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Ajoutez une &lt;AttributeDefinition&gt; \u00e0&nbsp;<em>attribute-resolver.xml<\/em>&nbsp;de la mani\u00e8re indiqu\u00e9e ci-dessous.<\/li><\/ol>\n\n\n\n<p>Ceci modifiera l\u2019attribut azName de l\u2019objet (donn\u00e9es extraites de la revendication entrante) en pour cr\u00e9er un attribut canonicalNameToUseForJoin qu\u2019on utilisera ailleurs.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;AttributeDefinition xsi:type=\"SubjectDerivedAttribute\"\n\nforCanonicalization=\"true\"\n\nid=\"canonicalNameToUseForJoin\"\n\nprincipalAttributeName=\"azureName\" \/&gt;<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\"><li>Ensuite, configurez les attributs que la fonction c14n doit r\u00e9soudre.<\/li><\/ol>\n\n\n\n<p>D\u00e9finissez les objets&nbsp;<strong>shibboleth.c14n.attribute.AttributesToResolve<\/strong>&nbsp;et&nbsp;<strong>shibboleth.c14n.attribute.AttributeSourceIds<\/strong>&nbsp;dans c14n\/attribute-sourced-subject-c14n-config.xml en leur attribuant l\u2019identifiant d\u00e9fini dans &lt;AttributeDefinition&gt; ci-dessus&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;util:list id=\"shibboleth.c14n.attribute.AttributesToResolve\"&gt;\n\n&lt;value&gt;canonicalNameToUseForJoin&lt;\/value&gt;\n\n&lt;\/util:list&gt;\n\n&lt;util:list id=\"shibboleth.c14n.attribute.AttributeSourceIds\"&gt;\n\n&lt;value&gt;canonicalNameToUseForJoin&lt;\/value&gt;\n\n&lt;\/util:list&gt;<\/code><\/pre>\n\n\n\n<p>Il se peut qu\u2019il y ait plus d\u2019un attribut selon la m\u00e9thode de procuration. En ce qui concerne Azure&nbsp;AD cependant, nous nous concentrerons sur un seul.<\/p>\n\n\n\n<p>Vous devriez maintenant disposer d\u2019un nom d\u2019utilisateur valable, d\u00e9chiffrable localement et pouvant \u00eatre relay\u00e9 au r\u00e9solveur \u00ab&nbsp;normal&nbsp;\u00bb en op\u00e9ration \u00e0 certains endroits comme&nbsp;:<\/p>\n\n\n\n<p>$resolutionContext.principal<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h15\">5<sup>e<\/sup>&nbsp;t\u00e2che&nbsp;: configurez la r\u00e9solution passe-syst\u00e8me ou hybride des attributs<\/h3>\n\n\n\n<p>Les attributs d\u2019Azure&nbsp;AD sont r\u00e9f\u00e9renc\u00e9s dans&nbsp;<em>attribute-resolver.xml<\/em>&nbsp;comme ceci&nbsp;:<\/p>\n\n\n\n<p>N\u2019oubliez pas d\u2019ajouter un commentaire \u00e0 l\u2019ancienne d\u00e9finition des noms dans attribute-resolver.xml sinon vous pourriez obtenir des r\u00e9sultats inattendus.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>AttributeDefinition xsi:type=\"SubjectDerivedAttribute\"\n\nforCanonicalization=\"false\"\n\nid=\"mail\"\n\nprincipalAttributeName=\"azureEmailaddress\" \/&gt;\n\n&nbsp;\n\n&lt;AttributeDefinition xsi:type=\"SubjectDerivedAttribute\"\n\nforCanonicalization=\"false\"\n\nid=\"displayName\"\n\nprincipalAttributeName=\"azureDisplayname\" \/&gt;\n\n&nbsp;\n\n&lt;AttributeDefinition xsi:type=\"SubjectDerivedAttribute\"\n\nid=\"eduPersonPrincipalName\"\n\nprincipalAttributeName=\"azureName\" \/&gt;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h16\">Essai<\/h2>\n\n\n\n<p>Relancez l\u2019IdP pour activer les modifications. Puisque la procuration que vous avez configur\u00e9e repose sur SAML, il n\u2019y a aucun sens \u00e0 utiliser l\u2019interface de commande aacli, car elle ne disposera d\u2019aucune information.<\/p>\n\n\n\n<p>Il arrive qu\u2019on cr\u00e9e un compte de d\u00e9veloppement dont le locataire permet d\u2019effectuer des essais totalement \u00e0 l\u2019\u00e9cart du locataire de production. Une autre solution consiste \u00e0 cr\u00e9er une application SAML hors de la galerie d\u2019Azure&nbsp;AD pour chaque IdP \u2013 soit une pour la production, une pour la pr\u00e9-production, etc. Il n\u2019existe aucune r\u00e8gle toute faite ou immuable sur la fa\u00e7on id\u00e9ale de proc\u00e9der, cependant le compte de d\u00e9veloppement est gratuit et se pr\u00eate bien \u00e0 la s\u00e9paration des justificatifs d\u2019identit\u00e9, car le domaine du t\u00e9moin (cookie) est enti\u00e8rement diff\u00e9rent.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h17\">Documentation \/ Lectures recommand\u00e9es<\/h2>\n\n\n\n<p><strong>Shibboleth<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/wiki.shibboleth.net\/confluence\/display\/IDP4\/SAMLAuthnConfiguration\" target=\"_blank\" rel=\"noreferrer noopener\">SAMLAuthnConfiguration<\/a><\/li><li><a href=\"https:\/\/wiki.shibboleth.net\/confluence\/display\/IDP4\/AttributePostLoginC14NConfiguration\" target=\"_blank\" rel=\"noreferrer noopener\">attribute-based subject c14n<\/a><\/li><\/ul>\n\n\n\n<p><strong>SSO et SAML d\u2019Azure AD<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Comprendre l\u2019authentification unique bas\u00e9e sur SAML&nbsp;:&nbsp;<a href=\"https:\/\/docs.microsoft.com\/fr-ca\/azure\/active-directory\/manage-apps\/configure-saml-single-sign-on\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/docs.microsoft.com\/fr-ca\/azure\/active-directory\/manage-apps\/configure-saml-single-sign-on<\/a><\/li><li>S\u00e9rie \u00ab&nbsp;D\u00e9marrage rapide&nbsp;\u00bb&nbsp;:&nbsp;<a href=\"https:\/\/docs.microsoft.com\/fr-ca\/azure\/active-directory\/manage-apps\/view-applications-portal\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/docs.microsoft.com\/fr-ca\/azure\/active-directory\/manage-apps\/view-applications-portal<\/a><\/li><\/ul>\n","protected":false},"featured_media":20431,"parent":0,"template":"","program":[137],"document_type":[225,195],"class_list":["post-23255","document","type-document","status-publish","has-post-thumbnail","hentry","program-fca","document_type-bulletins-gfi","document_type-soutien-technique"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>FCA - Comment se connecter \u00e0 Azure AD en utilisant la procuration SAML dans l\u2019IdP Shibboleth - CANARIE<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.canarie.ca\/fr\/document\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"FCA - Comment se connecter \u00e0 Azure AD en utilisant la procuration SAML dans l\u2019IdP Shibboleth - CANARIE\" \/>\n<meta property=\"og:description\" content=\"Avertissement&nbsp;: Vous trouverez la version la plus r\u00e9cente de ce guide technique dans le&nbsp;Wiki&nbsp;de Shibboleth. Sa version fran\u00e7aise sera actualis\u00e9e [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.canarie.ca\/fr\/document\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\/\" \/>\n<meta property=\"og:site_name\" content=\"CANARIE\" \/>\n<meta property=\"article:modified_time\" content=\"2021-07-30T18:57:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2018\/02\/news_FIM.png\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"405\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/document\\\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\\\/\",\"url\":\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/document\\\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\\\/\",\"name\":\"FCA - Comment se connecter \u00e0 Azure AD en utilisant la procuration SAML dans l\u2019IdP Shibboleth - CANARIE\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.canarie.ca\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/document\\\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/document\\\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.canarie.ca\\\/wp-content\\\/uploads\\\/2018\\\/02\\\/news_FIM.png\",\"datePublished\":\"2021-03-25T17:26:38+00:00\",\"dateModified\":\"2021-07-30T18:57:33+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/document\\\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/document\\\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/document\\\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.canarie.ca\\\/wp-content\\\/uploads\\\/2018\\\/02\\\/news_FIM.png\",\"contentUrl\":\"https:\\\/\\\/www.canarie.ca\\\/wp-content\\\/uploads\\\/2018\\\/02\\\/news_FIM.png\",\"width\":800,\"height\":405,\"caption\":\"caf fim\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/document\\\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"FCA &#8211; Comment se connecter \u00e0 Azure AD en utilisant la procuration SAML dans l\u2019IdP Shibboleth\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.canarie.ca\\\/#website\",\"url\":\"https:\\\/\\\/www.canarie.ca\\\/\",\"name\":\"CANARIE\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.canarie.ca\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"FCA - Comment se connecter \u00e0 Azure AD en utilisant la procuration SAML dans l\u2019IdP Shibboleth - CANARIE","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.canarie.ca\/fr\/document\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\/","og_locale":"fr_FR","og_type":"article","og_title":"FCA - Comment se connecter \u00e0 Azure AD en utilisant la procuration SAML dans l\u2019IdP Shibboleth - CANARIE","og_description":"Avertissement&nbsp;: Vous trouverez la version la plus r\u00e9cente de ce guide technique dans le&nbsp;Wiki&nbsp;de Shibboleth. Sa version fran\u00e7aise sera actualis\u00e9e [&hellip;]","og_url":"https:\/\/www.canarie.ca\/fr\/document\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\/","og_site_name":"CANARIE","article_modified_time":"2021-07-30T18:57:33+00:00","og_image":[{"width":800,"height":405,"url":"https:\/\/www.canarie.ca\/wp-content\/uploads\/2018\/02\/news_FIM.png","type":"image\/png"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.canarie.ca\/fr\/document\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\/","url":"https:\/\/www.canarie.ca\/fr\/document\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\/","name":"FCA - Comment se connecter \u00e0 Azure AD en utilisant la procuration SAML dans l\u2019IdP Shibboleth - CANARIE","isPartOf":{"@id":"https:\/\/www.canarie.ca\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.canarie.ca\/fr\/document\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\/#primaryimage"},"image":{"@id":"https:\/\/www.canarie.ca\/fr\/document\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\/#primaryimage"},"thumbnailUrl":"https:\/\/www.canarie.ca\/wp-content\/uploads\/2018\/02\/news_FIM.png","datePublished":"2021-03-25T17:26:38+00:00","dateModified":"2021-07-30T18:57:33+00:00","breadcrumb":{"@id":"https:\/\/www.canarie.ca\/fr\/document\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.canarie.ca\/fr\/document\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.canarie.ca\/fr\/document\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\/#primaryimage","url":"https:\/\/www.canarie.ca\/wp-content\/uploads\/2018\/02\/news_FIM.png","contentUrl":"https:\/\/www.canarie.ca\/wp-content\/uploads\/2018\/02\/news_FIM.png","width":800,"height":405,"caption":"caf fim"},{"@type":"BreadcrumbList","@id":"https:\/\/www.canarie.ca\/fr\/document\/fca-comment-se-connecter-a-azure-ad-en-utilisant-la-procuration-saml-dans-lidp-shibboleth\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.canarie.ca\/fr\/"},{"@type":"ListItem","position":2,"name":"FCA &#8211; Comment se connecter \u00e0 Azure AD en utilisant la procuration SAML dans l\u2019IdP Shibboleth"}]},{"@type":"WebSite","@id":"https:\/\/www.canarie.ca\/#website","url":"https:\/\/www.canarie.ca\/","name":"CANARIE","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.canarie.ca\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"}]}},"_links":{"self":[{"href":"https:\/\/www.canarie.ca\/fr\/wp-json\/wp\/v2\/document\/23255","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.canarie.ca\/fr\/wp-json\/wp\/v2\/document"}],"about":[{"href":"https:\/\/www.canarie.ca\/fr\/wp-json\/wp\/v2\/types\/document"}],"version-history":[{"count":0,"href":"https:\/\/www.canarie.ca\/fr\/wp-json\/wp\/v2\/document\/23255\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.canarie.ca\/fr\/wp-json\/wp\/v2\/media\/20431"}],"wp:attachment":[{"href":"https:\/\/www.canarie.ca\/fr\/wp-json\/wp\/v2\/media?parent=23255"}],"wp:term":[{"taxonomy":"program","embeddable":true,"href":"https:\/\/www.canarie.ca\/fr\/wp-json\/wp\/v2\/program?post=23255"},{"taxonomy":"document_type","embeddable":true,"href":"https:\/\/www.canarie.ca\/fr\/wp-json\/wp\/v2\/document_type?post=23255"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}