{"id":777,"date":"2018-11-18T11:06:25","date_gmt":"2018-11-18T10:06:25","guid":{"rendered":"http:\/\/remivernier.com\/?p=777"},"modified":"2018-11-22T14:57:31","modified_gmt":"2018-11-22T13:57:31","slug":"quatuor-gagnant-authentification-adfs-saml-2-0-avec-shibboleth-sp-3-sous-iis10-et-php","status":"publish","type":"post","link":"https:\/\/remivernier.com\/index.php\/2018\/11\/18\/quatuor-gagnant-authentification-adfs-saml-2-0-avec-shibboleth-sp-3-sous-iis10-et-php\/","title":{"rendered":"Quatuor gagnant: Authentification ADFS SAML 2.0 avec Shibboleth SP 3 sous IIS10 et PHP"},"content":{"rendered":"<p>Dans cet article nous allons voir comment configurer une f\u00e9d\u00e9ration SAML 2.0 entre ADFS 2016 et Shibboleth SP 3.0. Dans un second temps, nous verrons comment via PHP r\u00e9cup\u00e9rer les informations d&rsquo;identification et claims (assertions) d&rsquo;un utilisateur pr\u00e9c\u00e9demment authentifi\u00e9 au travers cette f\u00e9d\u00e9ration.<\/p>\n<h1>Pr\u00e9requis \u00e0 cette maquette<\/h1>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-780\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img1.jpg\" alt=\"\" width=\"736\" height=\"389\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img1.jpg 736w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img1-300x159.jpg 300w\" sizes=\"auto, (max-width: 736px) 100vw, 736px\" \/><\/a><\/p>\n<p><strong>Fournisseur d\u2019identit\u00e9 (Idp) :<\/strong>\u00a0ADFS (Windows Server 2016)<br \/>\n<strong>Metadata de l\u2019Idp:<\/strong>\u00a0https:\/\/fs.test.local\/FederationMetadata\/2007-06\/FederationMetadata.xml<br \/>\n<strong><br \/>\nFournisseur de services (Sp):<\/strong>\u00a0Shibboleth SP 3.0<br \/>\n<strong>Metadata du SP:<\/strong>\u00a0https:\/\/shibboleth.test.local\/Shibboleth.sso\/Metadata<\/p>\n<p><strong>Compte utilisateur standard sur l&rsquo;annuaire Active Directory:<\/strong>\u00a0localadminuser@test.local<\/p>\n<h1 id=\"saml-protocol-requirements\" class=\"heading-with-anchor\"><span data-ttu-id=\"c09ae-131\">Configuration du serveur applicatif: IIS<\/span><\/h1>\n<p><strong>Sur le serveur IIS:<\/strong><br \/>\nNous partons d&rsquo;une installation d&rsquo;un serveur IIS vierge. Seuls les composants ci dessous doivent explicitement \u00eatre install\u00e9s:<\/p>\n<ul>\n<li>FastCGI est un pr\u00e9requis \u00e0 PHP<\/li>\n<li>ISAPI Extentions et ISAPI Filter sont des pr\u00e9requis pour Shibboleth (voir partie \u00ab\u00a0Configuration du serveur applicatif: Shibboleth\u00a0\u00bb)<\/li>\n<\/ul>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img8.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-805\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img8.jpg\" alt=\"\" width=\"687\" height=\"231\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img8.jpg 687w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img8-300x101.jpg 300w\" sizes=\"auto, (max-width: 687px) 100vw, 687px\" \/><\/a><\/p>\n<p>Un des impond\u00e9rable \u00e0 ce type de m\u00e9canisme d&rsquo;authentification est que l&rsquo;ensemble des endpoints soient en HTTPS. Shibboleth comme ADFS doivent donc pr\u00e9senter des certificats TLS 1.2 sur les diff\u00e9rents endpoints.<\/p>\n<p>Dans ce sc\u00e9nario nous allons utiliser des certificats autosign\u00e9s mais pour des raison de s\u00e9curit\u00e9, notamment en cas de besoin de r\u00e9vocation d&rsquo;un certificat, une autorit\u00e9 de certification interne ou externe doit \u00eatre utilis\u00e9e.<\/p>\n<h1 id=\"saml-protocol-requirements\" class=\"heading-with-anchor\"><span data-ttu-id=\"c09ae-131\">Configuration du serveur applicatif:\u00a0PHP<\/span><\/h1>\n<p><strong>Sur le serveur IIS:<\/strong><br \/>\nPlusieurs m\u00e9thodes permettent d&rsquo;installer le composant PHP sur notre serveur IIS. Il est possible d&rsquo;utiliser la console \u00ab\u00a0New Web Platform Components\u00a0\u00bb mais nous effectuons ici une installation manuelle.<\/p>\n<p>Nous allons avoir besoin de 2 composants: PHP et PHP manager for IIS. Le premier est \u00e0 t\u00e9l\u00e9charger sur le site php.net <a href=\"https:\/\/windows.php.net\/downloadS\/releases\/php-7.2.12-Win32-VC15-x64.zip\">en suivant le lien ici<\/a>. Le 2eme, sous forme d\u2019extension pour IIS est \u00e0 t\u00e9l\u00e9charger sur le site IIS.net <a href=\"https:\/\/www.iis.net\/downloads\/community\/2018\/05\/php-manager-150-for-iis-10\">en suivant le lien ici<\/a>. PHP manager va nous permettre de configurer PHP via une interface graphique pr\u00e9sente dans le manager IIS.<\/p>\n<p>PHP livr\u00e9 sous format ZIP, est \u00e0 d\u00e9compress\u00e9 sous\u00a0C:\\php. L&rsquo;installation de PHP manager s&rsquo;effectue sans probl\u00e8me particulier en suivant l&rsquo;assistant.<\/p>\n<p>Pour v\u00e9rifier que ces 2 composants sont correctement install\u00e9s, il suffira de cliquer sur l&rsquo;icone PHP Manager pr\u00e9sents dans le manager IIS:<\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img7.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-803\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img7.jpg\" alt=\"\" width=\"910\" height=\"394\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img7.jpg 910w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img7-300x130.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img7-768x333.jpg 768w\" sizes=\"auto, (max-width: 910px) 100vw, 910px\" \/><\/a><\/p>\n<p>Il est souvent conseill\u00e9 de red\u00e9marrer un serveur apr\u00e8s l&rsquo;installation d&rsquo;un composant. Ici, je vous recommande de red\u00e9marrer les services IIS via la commande \u00ab\u00a0iisreset\u00a0\u00bb en tant qu&rsquo;administrateur une fois l&rsquo;installation de PHP et PHP manager termin\u00e9e.<\/p>\n<p>Afin de tester le bon fonctionnement de PHP nous pouvons cr\u00e9er le fameux phpinfo(); \u00e0 la racine du site:<\/p>\n<pre>&lt;?php\r\nphpinfo();\r\n?&gt;<\/pre>\n<p>Au lancement de la page le r\u00e9sultat\u00a0attendu doit \u00eatre la page ci dessous:<\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img18.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-849\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img18.jpg\" alt=\"\" width=\"953\" height=\"501\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img18.jpg 953w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img18-300x158.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img18-768x404.jpg 768w\" sizes=\"auto, (max-width: 953px) 100vw, 953px\" \/><\/a><\/p>\n<p>Nous pouvons consid\u00e9rer PHP comme fonctionnel. La s\u00e9curit\u00e9 doit \u00eatre renforc\u00e9e pour une utilisation en production. Vous pouvez <a href=\"https:\/\/docs.microsoft.com\/en-us\/iis\/application-frameworks\/install-and-configure-php-applications-on-iis\/using-fastcgi-to-host-php-applications-on-iis#php-security-recommendations\">suivre ce lien<\/a> notamment la partie \u00ab\u00a0PHP Security Recommendations\u00a0\u00bb qui est int\u00e9ressante pour traiter ce point.<\/p>\n<p>&nbsp;<\/p>\n<h1 id=\"saml-protocol-requirements\" class=\"heading-with-anchor\"><span data-ttu-id=\"c09ae-131\">Configuration du serveur applicatif:\u00a0Shibboleth SP<\/span><\/h1>\n<p><strong>Sur le serveur IIS:<\/strong><br \/>\nNous allons donc utiliser comme Service Provider l\u2019application\u00a0Shibboleth SP 3.0. Elle se pr\u00e9sente comme une\u00a0extension ISAPI. Elle est mise en \u0153uvre sous forme de DLL et charg\u00e9e sous contr\u00f4le d\u2019IIS. Je vous propose de consulter\u00a0<a href=\"http:\/\/remivernier.com\/index.php\/2018\/08\/23\/installer-shibboleth-sp-sous-iis-8\/\">cet article pour suivre son installation<\/a>. Dans la suite nous allons consid\u00e9rer que\u00a0Shibboleth SP est d\u00e9j\u00e0 install\u00e9 et pr\u00eat \u00e0 fonctionner. Nous verrons donc uniquement la partie param\u00e9trage du produit dans notre contexte.<\/p>\n<p>Le r\u00e9pertoire d\u2019installation de\u00a0Shibboleth SP est C:\\opt\\shibboleth-sp. Les r\u00e9pertoires et fichiers ci dessous vont particuli\u00e8rement nous int\u00e9resser:<\/p>\n<ul>\n<li>\u00a0<strong>C:\\opt\\shibboleth-sp\\etc\\shibboleth<\/strong><br \/>\n\u2013\u00a0<strong>shibboleth2.xml<\/strong>\u00a0qui contient la configuration g\u00e9n\u00e9rale de\u00a0Shibboleth<br \/>\n\u2013\u00a0<strong>attribute-map.xml<\/strong>\u00a0qui contient la translation des noms d\u2019attributs contenus dans les assertions SAML envoy\u00e9es par l\u2019IdP vers des en-t\u00eates HTTP exploitables par l\u2019application finale. Nous verrons \u00e0 la fin de cet article l&rsquo;exploitation de ces valeurs dans PHP.<br \/>\n\u2013\u00a0<strong>keygen.bat\u00a0<\/strong>qu\u2019il faudra ex\u00e9cuter pour g\u00e9n\u00e9rer une nouvelle paire de cl\u00e9s (Signature et Encryption sur SP).<br \/>\n\u2013\u00a0<strong>partner-metadata.xml<\/strong>\u00a0est le metadata de l\u2019IDP t\u00e9l\u00e9charg\u00e9 depuis le serveur ADFS 2016.<\/li>\n<li><strong>C:\\opt\\shibboleth-sp\\var\\log\\shibboleth<\/strong>\u00a0qui contient les fichiers de logs et notamment\u00a0shibd.log<\/li>\n<\/ul>\n<h2>Fichier\u00a0<strong>shibboleth2.xml<\/strong><\/h2>\n<p><strong>Original:<\/strong><\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img19.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-341\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img19.jpg\" alt=\"\" width=\"533\" height=\"130\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img19.jpg 533w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img19-300x73.jpg 300w\" sizes=\"auto, (max-width: 533px) 100vw, 533px\" \/><\/a><\/p>\n<p><strong>A remplacer par:<\/strong><\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-790\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img2.jpg\" alt=\"\" width=\"727\" height=\"130\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img2.jpg 727w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img2-300x54.jpg 300w\" sizes=\"auto, (max-width: 727px) 100vw, 727px\" \/><\/a><\/p>\n<p>l\u2019id doit correspondre \u00e0 l\u2019ID du site IIS:<\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img27.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-342\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img27.jpg\" alt=\"\" width=\"616\" height=\"43\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img27.jpg 616w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img27-300x21.jpg 300w\" sizes=\"auto, (max-width: 616px) 100vw, 616px\" \/><\/a><\/p>\n<p><strong>Original:<\/strong><\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img21.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-335\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img21.jpg\" alt=\"\" width=\"705\" height=\"165\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img21.jpg 705w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img21-300x70.jpg 300w\" sizes=\"auto, (max-width: 705px) 100vw, 705px\" \/><\/a><\/p>\n<p><strong>A remplacer par:<\/strong><\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-791\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img3.jpg\" alt=\"\" width=\"736\" height=\"171\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img3.jpg 736w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img3-300x70.jpg 300w\" sizes=\"auto, (max-width: 736px) 100vw, 736px\" \/><\/a><\/p>\n<p>Vous noterez ici que le r\u00e9pertoire \/secure\/ est par d\u00e9faut le r\u00e9pertoire o\u00f9 nous ferons appel \u00e0 Shibboleth comme m\u00e9thode d&rsquo;authentification. Ceci indique qu&rsquo;au chargement de l&rsquo;URL\u00a0https:\/\/monsite.test.local\/secure le module Shibboleth sera appel\u00e9 et l&rsquo;authentification requise.<br \/>\nIl est bien \u00e9videment possible d&rsquo;ajouter d&rsquo;autres r\u00e9pertoires en ajoutant une nouvelle balise &lt;Path name=monrepertoireasecuriser\u00a0\u00bb authType &#8230;<\/p>\n<p><strong>Original:<\/strong><\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img23.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-337\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img23.jpg\" alt=\"\" width=\"1051\" height=\"492\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img23.jpg 1051w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img23-300x140.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img23-768x360.jpg 768w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img23-1024x479.jpg 1024w\" sizes=\"auto, (max-width: 1051px) 100vw, 1051px\" \/><\/a><\/p>\n<p><strong>A remplacer par:<\/strong><\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img9.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-814\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img9.jpg\" alt=\"\" width=\"1052\" height=\"508\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img9.jpg 1052w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img9-300x145.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img9-768x371.jpg 768w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img9-1024x494.jpg 1024w\" sizes=\"auto, (max-width: 1052px) 100vw, 1052px\" \/><\/a><\/p>\n<p>L\u2019<strong>ApplicationDefaults<\/strong>\u00a0<strong>EntityID<\/strong>\u00a0(Identifier) doit correspondre \u00e0 celui qui sera renseign\u00e9 lors de la cr\u00e9ation du relying party trust dans ADFS.<\/p>\n<p>Il est \u00e0 noter que j&rsquo;ajoute <strong>signing=\u00a0\u00bbtrue\u00a0\u00bb<\/strong> et <strong>encryption=\u00a0\u00bbtrue\u00a0\u00bb<\/strong>. Ces param\u00e8tres ne sont pas obligatoire. Par d\u00e9faut, la signature des SAML_REQUEST et l&rsquo;encryption des SAML_RESPONSE sont propos\u00e9es par Shibboleth. En cas de suppressions de ces certificats cot\u00e9 ADFS, Shibboleth ne signera plus les SAML_REQUEST et ne chiffrera plus les SAML_RESPONSE. Passer ce param\u00e8tre \u00e0 \u00ab\u00a0true\u00a0\u00bb permet d&rsquo;imposer par le SP la signature et le chiffrement. Les 2 certificats permettant cette tache (voir execution du keygen.bat) sont pr\u00e9sents dans le metadata du SP et donc int\u00e9gr\u00e9s et utilis\u00e9 par ADFS.<\/p>\n<p>Le\u00a0<strong>SSO<\/strong>\u00a0<strong>EntityID<\/strong>\u00a0correspond \u00e0 l\u2019entityID pr\u00e9sent dans le metadata de l\u2019IDP t\u00e9l\u00e9chargeable \u00e0 l&rsquo;URL suivante:\u00a0https:\/\/fs.test.local\/FederationMetadata\/2007-06\/FederationMetadata.xml<\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img6.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-798\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img6.jpg\" alt=\"\" width=\"1289\" height=\"108\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img6.jpg 1289w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img6-300x25.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img6-768x64.jpg 768w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img6-1024x86.jpg 1024w\" sizes=\"auto, (max-width: 1289px) 100vw, 1289px\" \/><\/a><\/p>\n<p>Nous en profitons pour renforcer les contr\u00f4les de s\u00e9curit\u00e9 en passant checkAddress et handlerSSL \u00e0 true et\u00a0cookieProps \u00e0 https. Nous pouvons supprimer la partie\u00a0discoveryProtocol et\u00a0discoveryURL, ADFS ne poss\u00e9dant pas cette fonctionnalit\u00e9 de d\u00e9couverte.<\/p>\n<p>Enfin, nous supprimons l\u2019acl pr\u00e9sente sur la page \/Status et passons le\u00a0showAttributeValues de \/Session \u00e0 true.<\/p>\n<p>&nbsp;<\/p>\n<h2><strong>Fichier attribute-map.xml<\/strong><\/h2>\n<p>Ce fichier va permettre d\u2019indiquer \u00e0 Shibboleth de mapper les attributs pr\u00e9sents dans notre jeton SAML avec des id que nous allons r\u00e9cup\u00e9rer sous forme de variable dans PHP.<\/p>\n<p>Nous pouvons supprimer l\u2019ensemble des exemples pr\u00e9sents par d\u00e9faut dans ce fichier XML et le remplacer par ce que nous souhaitons exploiter dans notre jeton SAML:<\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img5.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-795\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img5.jpg\" alt=\"\" width=\"1226\" height=\"162\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img5.jpg 1226w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img5-300x40.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img5-768x101.jpg 768w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img5-1024x135.jpg 1024w\" sizes=\"auto, (max-width: 1226px) 100vw, 1226px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h2>Ex\u00e9cution<strong>\u00a0du keygen.bat<\/strong><\/h2>\n<p>Dans ce sc\u00e9nario, nous allons utiliser la possibilit\u00e9 de signer les SAML REQUEST ou chiffrer les SAML_RESPONSE avec les certificats pr\u00e9sents et inscrits dans le metadata cot\u00e9 SP. Il nous faut ex\u00e9cuter en tant qu\u2019admin les commandes ci dessous dans un \u00ab\u00a0cmd\u00a0\u00bb:<\/p>\n<p>C:\\opt\\shibboleth-sp\\etc\\shibboleth&gt;\u00a0<strong>keygen.bat -h shibboleth.test.local -e https:\/\/shibboleth.test.local -f -n sp-encrypt<\/strong><br \/>\nC:\\opt\\shibboleth-sp\\etc\\shibboleth&gt;\u00a0<strong>keygen.bat -h shibboleth.test.local -e https:\/\/shibboleth.test.local -f -n sp-signing<\/strong><\/p>\n<p>Les nouvelles paires de cl\u00e9s sont alors cr\u00e9\u00e9s sous\u00a0<strong>C:\\opt\\shibboleth-sp\\etc\\shibboleth<\/strong><\/p>\n<ul>\n<li>sp-encrypt-cert.pem \u2013 correspond \u00e0 la cl\u00e9 publique du certificat d\u2019encryption cot\u00e9 SP<\/li>\n<li>sp-encrypt-key.pem\u00a0\u2013 correspond \u00e0 la cl\u00e9 priv\u00e9e du certificat d\u2019encryption cot\u00e9 SP<\/li>\n<li>sp-signing-cert.pem\u00a0\u2013 correspond \u00e0 la cl\u00e9 publique du certificat de signature cot\u00e9 SP<\/li>\n<li>sp-signing-key.pem \u2013 correspond \u00e0 la cl\u00e9 priv\u00e9e du certificat de signature cot\u00e9 SP<\/li>\n<\/ul>\n<p>Le fichier\u00a0<strong>shibboleth2.xml<\/strong>\u00a0en fait r\u00e9f\u00e9rence ci dessous<strong>\u00a0:<\/strong><\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img30.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-350\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img30.jpg\" alt=\"\" width=\"688\" height=\"97\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img30.jpg 688w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img30-300x42.jpg 300w\" sizes=\"auto, (max-width: 688px) 100vw, 688px\" \/><\/a><\/p>\n<h2><strong>Fichier partner-metadata.xml<\/strong><\/h2>\n<p>Il s\u2019agit ni plus ni moins des m\u00e9tadonn\u00e9es de notre IDP cot\u00e9 ADFS, t\u00e9l\u00e9chargeable en suivant le lien https:\/\/fs.test.local\/FederationMetadata\/2007-06\/FederationMetadata.xml. Ce fichier est \u00e0 copier dans\u00a0C:\\opt\\shibboleth-sp\\etc\\shibboleth et \u00e0 renommer\u00a0partner-metadata.xml<\/p>\n<p>&nbsp;<\/p>\n<p>L\u2019ensemble de la configuration de Shibboleth SP est \u00e0 pr\u00e9sent termin\u00e9e. Pour appliquer celle ci, il suffit de red\u00e9marrer le service\u00a0Shibboleth Daemon (Default).<br \/>\nLe fichier\u00a0C:\\opt\\shibboleth-sp\\var\\log\\shibboleth\\shibd.log\u00a0doit nous indiquer aucune erreur au d\u00e9marrage.<\/p>\n<p>Pour v\u00e9rifier que la configuration est effective, il doit \u00eatre possible de consulter le metadata du serveur Shibbolet via l&rsquo;URL ci apr\u00e8s:\u00a0https:\/\/shibboleth.test.local\/Shibboleth.sso\/Metadata<br \/>\nC&rsquo;est d&rsquo;ailleurs cette derni\u00e8re URL que nous allons utiliser pour initier la configuration du\u00a0relying party trust dans ADFS.<\/p>\n<h1 id=\"saml-protocol-requirements\" class=\"heading-with-anchor\"><span data-ttu-id=\"c09ae-131\">Configuration du fournisseur d&rsquo;identit\u00e9: ADFS<\/span><\/h1>\n<p><strong>Sur le serveur ADFS:<\/strong><br \/>\nLa configuration des services ADFS s&rsquo;effectue via la console \u00ab\u00a0AD FS Management\u00a0\u00bb. Nous allons cr\u00e9er un\u00a0relying party trust\u00a0 \u00e0 partir des informations pr\u00e9sentes dans le metadata de Shibboleth.<br \/>\nEn cliquant sur Add Relying Party Trust&#8230; nous pouvons s\u00e9lectionner le type d&rsquo;application souhait\u00e9e: Claim aware.<a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img10.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-824\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img10.jpg\" alt=\"\" width=\"963\" height=\"454\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img10.jpg 963w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img10-300x141.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img10-768x362.jpg 768w\" sizes=\"auto, (max-width: 963px) 100vw, 963px\" \/><\/a><\/p>\n<p>Nous allons \u00e0 pr\u00e9sent utiliser la fonction d&rsquo;import automatique de la configuration Shibboleth pr\u00e9sente dans le metadata. Ce metadata sera consult\u00e9 1 fois par jour pour prendre en compte les \u00e9ventuelles modifications que nous aurions apport\u00e9es \u00e0 la configuration Shibboleth.<\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/Shibboleth-sp-3-avec-iis-10-et-php-img11.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-825\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/Shibboleth-sp-3-avec-iis-10-et-php-img11.jpg\" alt=\"\" width=\"716\" height=\"313\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/Shibboleth-sp-3-avec-iis-10-et-php-img11.jpg 716w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/Shibboleth-sp-3-avec-iis-10-et-php-img11-300x131.jpg 300w\" sizes=\"auto, (max-width: 716px) 100vw, 716px\" \/><\/a><\/p>\n<p>Saisir le nom de notre\u00a0Relying Party Trust:<\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img12.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-826\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img12.jpg\" alt=\"\" width=\"714\" height=\"296\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img12.jpg 714w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img12-300x124.jpg 300w\" sizes=\"auto, (max-width: 714px) 100vw, 714px\" \/><\/a><\/p>\n<p>Nous ne poss\u00e9dons pas dans notre sc\u00e9nario de fournisseur de MFA et souhaitons au passage une configuration sans politique de contr\u00f4le. L&rsquo;ensemble de nos utilisateurs pr\u00e9sents dans notre annuaire Active Directory pourront donc s&rsquo;authentifier au travers ce\u00a0Relying Party Trust. Nous pouvons s\u00e9lectionner l&rsquo;option \u00ab\u00a0Permit Everyone\u00a0\u00bb:<\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img13.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-827\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img13.jpg\" alt=\"\" width=\"710\" height=\"337\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img13.jpg 710w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img13-300x142.jpg 300w\" sizes=\"auto, (max-width: 710px) 100vw, 710px\" \/><\/a><\/p>\n<p>Avant de valider la fin de la configuration, nous allons v\u00e9rifier que\u00a0le Relying party identifier et bien identique \u00e0 <strong>ApplicationDefaults<\/strong>\u00a0<strong>EntityID<\/strong> de notre Shibboleth :<\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img17.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-839\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img17.jpg\" alt=\"\" width=\"709\" height=\"269\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img17.jpg 709w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img17-300x114.jpg 300w\" sizes=\"auto, (max-width: 709px) 100vw, 709px\" \/><\/a>Nous laisserons la case \u00ab\u00a0Configure claims issuance policy for this application\u00a0\u00bb coch\u00e9e. La fen\u00eatre nous permettant d&rsquo;\u00e9diter le contenu de notre claim s&rsquo;ouvre.<\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img14.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-828\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img14.jpg\" alt=\"\" width=\"712\" height=\"254\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img14.jpg 712w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img14-300x107.jpg 300w\" sizes=\"auto, (max-width: 712px) 100vw, 712px\" \/><\/a><\/p>\n<p>Le bouton \u00ab\u00a0Add Rules\u00a0\u00bb va nous permettre d&rsquo;ajouter les 2 r\u00e8gles ci dessous. Dans notre sc\u00e9nario, nous allons ajouter l&rsquo;UPN et le Display Name de l&rsquo;utilisateur.<\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img15.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-830\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img15.jpg\" alt=\"\" width=\"707\" height=\"398\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img15.jpg 707w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img15-300x169.jpg 300w\" sizes=\"auto, (max-width: 707px) 100vw, 707px\" \/><\/a><\/p>\n<pre><em>c:[Type == \"http:\/\/schemas.microsoft.com\/ws\/2008\/06\/identity\/claims\/windowsaccountname\", Issuer == \"AD AUTHORITY\"]<\/em>\r\n<em>=&gt; issue(store = \"Active Directory\", types = (\"http:\/\/schemas.xmlsoap.org\/ws\/2005\/05\/identity\/claims\/upn\", \"http:\/\/schemas.xmlsoap.org\/ws\/2005\/05\/identity\/claims\/name\"),<\/em>\r\n<em>query = \";userPrincipalName,displayName;{0}\", param = c.Value);<\/em><\/pre>\n<p>Nous en profiterons pour cr\u00e9er une r\u00e8gle de transformation afin de pr\u00e9ciser le Name ID et son formatage:<\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img16.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-831\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img16.jpg\" alt=\"\" width=\"712\" height=\"487\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img16.jpg 712w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img16-300x205.jpg 300w\" sizes=\"auto, (max-width: 712px) 100vw, 712px\" \/><\/a><\/p>\n<pre><em>c:[Type == \"http:\/\/schemas.xmlsoap.org\/ws\/2005\/05\/identity\/claims\/upn\"]<\/em>\r\n<em>=&gt; issue(Type = \"http:\/\/schemas.xmlsoap.org\/ws\/2005\/05\/identity\/claims\/nameidentifier\", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value, ValueType = c.ValueType, Properties[\"http:\/\/schemas.xmlsoap.org\/ws\/2005\/05\/identity\/claimproperties\/format\"] = \"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\");<\/em><\/pre>\n<p>La configuration du\u00a0Relying Party Trust ADFS est a pr\u00e9sent termin\u00e9e.<\/p>\n<h1 id=\"saml-protocol-requirements\" class=\"heading-with-anchor\"><span data-ttu-id=\"c09ae-131\">R\u00e9cup\u00e9ration et exploitation des assertions par PHP<\/span><\/h1>\n<p>Une fois l&rsquo;utilisateur authentifi\u00e9, Shibboleth va r\u00e9cup\u00e9rer les assertions transmises par le client \u00e0 travers la SAML_RESPONSE et configur\u00e9es\/mapp\u00e9es dans le fichier\u00a0<strong>attribute-map.xml<\/strong>. Il va les mettre \u00e0 disposition sous fourme de variable dans un tableau dans les en-t\u00eates HTTP cot\u00e9 serveur. Les en-t\u00eates HTTP permettent au client et au serveur de transmettre des informations suppl\u00e9mentaires avec la demande ou la r\u00e9ponse. Shibboleth va donc en profiter pour ajouter des en-t\u00eates commen\u00e7ant par:<\/p>\n<ul>\n<li>HTTP_XXXX: Pour les valeurs configur\u00e9es dans\u00a0attribute-map.xml ou XXXX repr\u00e9sente\u00a0 l&rsquo;id de l&rsquo;assertion.<\/li>\n<li>HTTP_SHIBZZZZZ:\u00a0Pour valeurs internes positionn\u00e9es automatiquement par la brique Shibboleth.<\/li>\n<\/ul>\n<p><strong>Vue des en-t\u00eates HTTP:<\/strong><br \/>\n<a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img20.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-854\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img20.jpg\" alt=\"\" width=\"970\" height=\"291\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img20.jpg 970w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img20-300x90.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img20-768x230.jpg 768w\" sizes=\"auto, (max-width: 970px) 100vw, 970px\" \/><\/a><\/p>\n<p><strong>Vue du fichier\u00a0attribute-map.xml de Shibboleth<\/strong><br \/>\n<a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img21.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-855\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img21.jpg\" alt=\"\" width=\"1225\" height=\"141\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img21.jpg 1225w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img21-300x35.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img21-768x88.jpg 768w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img21-1024x118.jpg 1024w\" sizes=\"auto, (max-width: 1225px) 100vw, 1225px\" \/><\/a><\/p>\n<p>Il est a noter que\u00a0variable REMOTE_USER est une variable sp\u00e9ciale. Elle prend la valeur d\u00e9j\u00e0 pr\u00e9sente dans PERSISTANT-ID car nous avons configur\u00e9 le SP Shibboleth pour cela (\u00e9l\u00e9ment ApplicationDefaults\/REMOTE_USER de <strong>shibboleth2.xml<\/strong>). Elle est pr\u00e9sente ici pour des raisons de compatibilit\u00e9:<\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img27.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-867\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img27.jpg\" alt=\"\" width=\"1055\" height=\"80\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img27.jpg 1055w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img27-300x23.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img27-768x58.jpg 768w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img27-1024x78.jpg 1024w\" sizes=\"auto, (max-width: 1055px) 100vw, 1055px\" \/><\/a><\/p>\n<p>Afin de r\u00e9cup\u00e9rer ces valeurs, nous pouvons utiliser une simple fonction PHP:<\/p>\n<pre>&lt;?php \r\nprint_r($_SERVER) \r\n?&gt;<\/pre>\n<p>Cette fonction va nous afficher un tableau contenant\u00a0en-t\u00eates cot\u00e9 serveur:<\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img23.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-860\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img23.jpg\" alt=\"\" width=\"700\" height=\"435\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img23.jpg 700w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img23-300x186.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img23-200x125.jpg 200w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Pour pouvoir exploiter ces valeurs et par exemple r\u00e9cup\u00e9rer le nom de l&rsquo;utilisateur, il faudra cr\u00e9er une page <strong>index.php<\/strong> sous le r\u00e9pertoire<strong>\/secure\/<\/strong> (https:\/\/shibboleth.test.local\/secure\/) contenant la m\u00eame fonction utilis\u00e9e ci dessous mais pr\u00e9cisant la valeur que nous souhaitons r\u00e9cup\u00e9rer sous forme de variable.<\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img24.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-862\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img24.jpg\" alt=\"\" width=\"486\" height=\"265\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img24.jpg 486w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img24-300x164.jpg 300w\" sizes=\"auto, (max-width: 486px) 100vw, 486px\" \/><\/a><\/p>\n<pre>&lt;html&gt;\r\n &lt;head&gt;\r\n  &lt;title&gt;Bonjour&lt;\/title&gt;\r\n &lt;\/head&gt;\r\n &lt;body&gt;\r\n &lt;?php \r\n$login = $_SERVER[HTTP_NAME];\r\necho 'Bonjour ';\r\necho $login; \r\n?&gt;\r\n &lt;\/body&gt;\r\n&lt;\/html&gt;<\/pre>\n<p>Au lancement de la page et apr\u00e8s authentification par notre IDP,\u00a0 le r\u00e9sultat doit afficher la valeur contenant le nom de l&rsquo;utilisateur authentifi\u00e9:<\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img26.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-865\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img26.jpg\" alt=\"\" width=\"616\" height=\"122\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img26.jpg 616w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img26-300x59.jpg 300w\" sizes=\"auto, (max-width: 616px) 100vw, 616px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans cet article nous allons voir comment configurer une f\u00e9d\u00e9ration SAML 2.0 entre ADFS 2016 et Shibboleth SP 3.0. Dans un second temps, nous verrons comment via PHP r\u00e9cup\u00e9rer les informations d&rsquo;identification et claims (assertions) d&rsquo;un utilisateur pr\u00e9c\u00e9demment authentifi\u00e9 au travers cette f\u00e9d\u00e9ration. Pr\u00e9requis \u00e0 cette maquette Fournisseur d\u2019identit\u00e9 (Idp) :\u00a0ADFS (Windows Server 2016) Metadata<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[43,36,47],"tags":[44,6,45,29,34],"class_list":["post-777","post","type-post","status-publish","format-standard","hentry","category-http","category-saml","category-shibboleth-protocoles","tag-adfs","tag-iis","tag-php","tag-saml","tag-shibboleth"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.8.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Quatuor gagnant: Authentification ADFS SAML 2.0 avec Shibboleth SP 3 sous IIS10 et PHP - R\u00e9mi VERNIER<\/title>\n<meta name=\"description\" content=\"Dans cet article nous allons voir comment configurer une f\u00e9d\u00e9ration SAML 2.0 entre ADFS 2016 et Shibboleth SP 3.0. Dans un second temps, nous verrons comment via PHP r\u00e9cup\u00e9rer les informations d&#039;identification et claims (assertions) d&#039;un utilisateur pr\u00e9c\u00e9demment authentifi\u00e9 au travers cette f\u00e9d\u00e9ration.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/remivernier.com\/index.php\/2018\/11\/18\/quatuor-gagnant-authentification-adfs-saml-2-0-avec-shibboleth-sp-3-sous-iis10-et-php\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Quatuor gagnant: Authentification ADFS SAML 2.0 avec Shibboleth SP 3 sous IIS10 et PHP - R\u00e9mi VERNIER\" \/>\n<meta property=\"og:description\" content=\"Dans cet article nous allons voir comment configurer une f\u00e9d\u00e9ration SAML 2.0 entre ADFS 2016 et Shibboleth SP 3.0. Dans un second temps, nous verrons comment via PHP r\u00e9cup\u00e9rer les informations d&#039;identification et claims (assertions) d&#039;un utilisateur pr\u00e9c\u00e9demment authentifi\u00e9 au travers cette f\u00e9d\u00e9ration.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/remivernier.com\/index.php\/2018\/11\/18\/quatuor-gagnant-authentification-adfs-saml-2-0-avec-shibboleth-sp-3-sous-iis10-et-php\/\" \/>\n<meta property=\"og:site_name\" content=\"R\u00e9mi VERNIER\" \/>\n<meta property=\"article:published_time\" content=\"2018-11-18T10:06:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-11-22T13:57:31+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img1.jpg\" \/>\n<meta name=\"author\" content=\"R\u00e9mi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"R\u00e9mi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/remivernier.com\/index.php\/2018\/11\/18\/quatuor-gagnant-authentification-adfs-saml-2-0-avec-shibboleth-sp-3-sous-iis10-et-php\/\",\"url\":\"https:\/\/remivernier.com\/index.php\/2018\/11\/18\/quatuor-gagnant-authentification-adfs-saml-2-0-avec-shibboleth-sp-3-sous-iis10-et-php\/\",\"name\":\"Quatuor gagnant: Authentification ADFS SAML 2.0 avec Shibboleth SP 3 sous IIS10 et PHP - R\u00e9mi VERNIER\",\"isPartOf\":{\"@id\":\"https:\/\/remivernier.com\/#website\"},\"datePublished\":\"2018-11-18T10:06:25+00:00\",\"dateModified\":\"2018-11-22T13:57:31+00:00\",\"author\":{\"@id\":\"https:\/\/remivernier.com\/#\/schema\/person\/a4c76c63a5a3d94454484845e42fc906\"},\"description\":\"Dans cet article nous allons voir comment configurer une f\u00e9d\u00e9ration SAML 2.0 entre ADFS 2016 et Shibboleth SP 3.0. Dans un second temps, nous verrons comment via PHP r\u00e9cup\u00e9rer les informations d'identification et claims (assertions) d'un utilisateur pr\u00e9c\u00e9demment authentifi\u00e9 au travers cette f\u00e9d\u00e9ration.\",\"breadcrumb\":{\"@id\":\"https:\/\/remivernier.com\/index.php\/2018\/11\/18\/quatuor-gagnant-authentification-adfs-saml-2-0-avec-shibboleth-sp-3-sous-iis10-et-php\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/remivernier.com\/index.php\/2018\/11\/18\/quatuor-gagnant-authentification-adfs-saml-2-0-avec-shibboleth-sp-3-sous-iis10-et-php\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/remivernier.com\/index.php\/2018\/11\/18\/quatuor-gagnant-authentification-adfs-saml-2-0-avec-shibboleth-sp-3-sous-iis10-et-php\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/remivernier.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Quatuor gagnant: Authentification ADFS SAML 2.0 avec Shibboleth SP 3 sous IIS10 et PHP\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/remivernier.com\/#website\",\"url\":\"https:\/\/remivernier.com\/\",\"name\":\"R\u00e9mi VERNIER\",\"description\":\"Active Directory Services, Azure &amp; co...\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/remivernier.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/remivernier.com\/#\/schema\/person\/a4c76c63a5a3d94454484845e42fc906\",\"name\":\"R\u00e9mi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/remivernier.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f750448bc07f5d1d9c1189344283777ec0d33275c184599b199fb6b305bc6fba?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f750448bc07f5d1d9c1189344283777ec0d33275c184599b199fb6b305bc6fba?s=96&d=mm&r=g\",\"caption\":\"R\u00e9mi\"},\"sameAs\":[\"http:\/\/www.linkedin.com\/in\/remi-vernier\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Quatuor gagnant: Authentification ADFS SAML 2.0 avec Shibboleth SP 3 sous IIS10 et PHP - R\u00e9mi VERNIER","description":"Dans cet article nous allons voir comment configurer une f\u00e9d\u00e9ration SAML 2.0 entre ADFS 2016 et Shibboleth SP 3.0. Dans un second temps, nous verrons comment via PHP r\u00e9cup\u00e9rer les informations d'identification et claims (assertions) d'un utilisateur pr\u00e9c\u00e9demment authentifi\u00e9 au travers cette f\u00e9d\u00e9ration.","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:\/\/remivernier.com\/index.php\/2018\/11\/18\/quatuor-gagnant-authentification-adfs-saml-2-0-avec-shibboleth-sp-3-sous-iis10-et-php\/","og_locale":"fr_FR","og_type":"article","og_title":"Quatuor gagnant: Authentification ADFS SAML 2.0 avec Shibboleth SP 3 sous IIS10 et PHP - R\u00e9mi VERNIER","og_description":"Dans cet article nous allons voir comment configurer une f\u00e9d\u00e9ration SAML 2.0 entre ADFS 2016 et Shibboleth SP 3.0. Dans un second temps, nous verrons comment via PHP r\u00e9cup\u00e9rer les informations d'identification et claims (assertions) d'un utilisateur pr\u00e9c\u00e9demment authentifi\u00e9 au travers cette f\u00e9d\u00e9ration.","og_url":"https:\/\/remivernier.com\/index.php\/2018\/11\/18\/quatuor-gagnant-authentification-adfs-saml-2-0-avec-shibboleth-sp-3-sous-iis10-et-php\/","og_site_name":"R\u00e9mi VERNIER","article_published_time":"2018-11-18T10:06:25+00:00","article_modified_time":"2018-11-22T13:57:31+00:00","og_image":[{"url":"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/11\/shibboleth-sp-3-avec-iis-10-et-php-img1.jpg"}],"author":"R\u00e9mi","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"R\u00e9mi","Dur\u00e9e de lecture estim\u00e9e":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/remivernier.com\/index.php\/2018\/11\/18\/quatuor-gagnant-authentification-adfs-saml-2-0-avec-shibboleth-sp-3-sous-iis10-et-php\/","url":"https:\/\/remivernier.com\/index.php\/2018\/11\/18\/quatuor-gagnant-authentification-adfs-saml-2-0-avec-shibboleth-sp-3-sous-iis10-et-php\/","name":"Quatuor gagnant: Authentification ADFS SAML 2.0 avec Shibboleth SP 3 sous IIS10 et PHP - R\u00e9mi VERNIER","isPartOf":{"@id":"https:\/\/remivernier.com\/#website"},"datePublished":"2018-11-18T10:06:25+00:00","dateModified":"2018-11-22T13:57:31+00:00","author":{"@id":"https:\/\/remivernier.com\/#\/schema\/person\/a4c76c63a5a3d94454484845e42fc906"},"description":"Dans cet article nous allons voir comment configurer une f\u00e9d\u00e9ration SAML 2.0 entre ADFS 2016 et Shibboleth SP 3.0. Dans un second temps, nous verrons comment via PHP r\u00e9cup\u00e9rer les informations d'identification et claims (assertions) d'un utilisateur pr\u00e9c\u00e9demment authentifi\u00e9 au travers cette f\u00e9d\u00e9ration.","breadcrumb":{"@id":"https:\/\/remivernier.com\/index.php\/2018\/11\/18\/quatuor-gagnant-authentification-adfs-saml-2-0-avec-shibboleth-sp-3-sous-iis10-et-php\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/remivernier.com\/index.php\/2018\/11\/18\/quatuor-gagnant-authentification-adfs-saml-2-0-avec-shibboleth-sp-3-sous-iis10-et-php\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/remivernier.com\/index.php\/2018\/11\/18\/quatuor-gagnant-authentification-adfs-saml-2-0-avec-shibboleth-sp-3-sous-iis10-et-php\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/remivernier.com\/"},{"@type":"ListItem","position":2,"name":"Quatuor gagnant: Authentification ADFS SAML 2.0 avec Shibboleth SP 3 sous IIS10 et PHP"}]},{"@type":"WebSite","@id":"https:\/\/remivernier.com\/#website","url":"https:\/\/remivernier.com\/","name":"R\u00e9mi VERNIER","description":"Active Directory Services, Azure &amp; co...","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/remivernier.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/remivernier.com\/#\/schema\/person\/a4c76c63a5a3d94454484845e42fc906","name":"R\u00e9mi","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/remivernier.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/f750448bc07f5d1d9c1189344283777ec0d33275c184599b199fb6b305bc6fba?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f750448bc07f5d1d9c1189344283777ec0d33275c184599b199fb6b305bc6fba?s=96&d=mm&r=g","caption":"R\u00e9mi"},"sameAs":["http:\/\/www.linkedin.com\/in\/remi-vernier"]}]}},"_links":{"self":[{"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/posts\/777","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/comments?post=777"}],"version-history":[{"count":60,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/posts\/777\/revisions"}],"predecessor-version":[{"id":869,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/posts\/777\/revisions\/869"}],"wp:attachment":[{"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/media?parent=777"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/categories?post=777"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/tags?post=777"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}