{"id":247,"date":"2018-08-18T16:44:38","date_gmt":"2018-08-18T14:44:38","guid":{"rendered":"http:\/\/remivernier.com\/?p=247"},"modified":"2018-11-21T11:07:19","modified_gmt":"2018-11-21T10:07:19","slug":"saml-azuread","status":"publish","type":"post","link":"https:\/\/remivernier.com\/index.php\/2018\/08\/18\/saml-azuread\/","title":{"rendered":"Int\u00e9grer une application utilisant le protocole SAML 2.0 \u00e0 Azure AD"},"content":{"rendered":"<p>Dans cet article nous allons voir quels sont les diff\u00e9rentes applications et type d&rsquo;applications pr\u00e9sentes sous Azure AD et plus pr\u00e9cis\u00e9ment l&rsquo;ajout d&rsquo;une application fonctionnant sur le protocole SAML 2.0.<\/p>\n<p>Globalement, le portail Azure propose plusieurs type d&rsquo;applications, pour plusieurs sc\u00e9narios.\u00a0Les applications sont ajout\u00e9es \u00e0 Azure AD pour exploiter un ou plusieurs des services fournis, notamment:<\/p>\n<ul>\n<li>Authentification et autorisation d&rsquo;application<\/li>\n<li>Authentification et autorisation de l&rsquo;utilisateur<\/li>\n<li>SSO en utilisant la f\u00e9d\u00e9ration ADFS ou le mot de passe pr\u00e9sent dans l&rsquo;annuaire AZURE AD<\/li>\n<li>Mise en service et synchronisation des utilisateurs<\/li>\n<li>Contr\u00f4le d&rsquo;acc\u00e8s bas\u00e9 sur les r\u00f4les &#8211; Utilisez l&rsquo;annuaire pour d\u00e9finir des r\u00f4les d&rsquo;application afin d&rsquo;effectuer des contr\u00f4les d&rsquo;autorisation bas\u00e9s sur les r\u00f4les dans une application.<\/li>\n<li>Services d&rsquo;autorisation OAuth &#8211; Utilis\u00e9 par Office 365 et d&rsquo;autres applications Microsoft pour autoriser l&rsquo;acc\u00e8s aux API \/ ressources<\/li>\n<li>Publication d&rsquo;application et proxy &#8211; Publie une application d&rsquo;un r\u00e9seau priv\u00e9 sur Internet<\/li>\n<\/ul>\n<p>Dans notre sc\u00e9nario, nous allons exploiter une fonctionnalit\u00e9 PREMIUM d&rsquo;Azure bas\u00e9e sur l&rsquo;ajout d&rsquo;une application SAML 2.0 qui\u00a0<span data-ttu-id=\"0f0a7-104\">fournira une exp\u00e9rience d\u2019authentification unique aux utilisateurs. L&rsquo;application qui sera utilis\u00e9e en exemple sera\u00a0<strong>Shibboleth SP<\/strong> sous II 8. Une autre application compatible SAML 2.0 pourrait aussi \u00eatre utilis\u00e9e, comme <a href=\"https:\/\/simplesamlphp.org\/docs\/stable\/simplesamlphp-sp\" target=\"_blank\" rel=\"noopener\">SimpleSAMLphp-sp<\/a> par exemple.<\/span><\/p>\n<h1>Pr\u00e9requis \u00e0 cette maquette<\/h1>\n<p><a href=\"http:\/\/remivernier.com\/index.php\/2018\/08\/21\/saml-azuread\/saml-azuread-sch1\/\" rel=\"attachment wp-att-250\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-250\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-sch1.jpg\" alt=\"\" width=\"757\" height=\"433\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-sch1.jpg 757w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-sch1-300x172.jpg 300w\" sizes=\"auto, (max-width: 757px) 100vw, 757px\" \/><\/a><\/p>\n<p><strong>Fournisseur d&rsquo;identit\u00e9 (Idp) :<\/strong> Azure AD<br \/>\n<strong>Point de terminaison de l&rsquo;Idp:<\/strong>\u00a0https:\/\/login.microsoftonline.com\/93535e3e-9602-4158-afe0-d87fdeeeec9d\/federationmetadata\/2007-06\/federationmetadata.xml?appid=2b1cf0b0-f5e9-4c58-ab5d-1c6c7b7656ce<br \/>\n<strong>Fournisseur de services (Sp):<\/strong>\u00a0https:\/\/monsite.test.local\/Shibboleth.sso\/Login<br \/>\n<strong>Url de redirection du SP:<\/strong>\u00a0https:\/\/monsite.test.local\/Shibboleth.sso\/SAML2\/POST<br \/>\n<strong>Compte utilisateur standard Azure AD:<\/strong> utilisateur1@remivernierhotmail.onmicrosoft.com<\/p>\n<blockquote><p><em>Toute application qui externalise l\u2019authentification pour la confier \u00e0 Azure AD doit \u00eatre inscrite dans un annuaire. Cette \u00e9tape consiste \u00e0 donner des informations sur l&rsquo;application \u00e0 Azure AD (\u00e9change m\u00e9tadonn\u00e9es), y compris son URL, l\u2019URL \u00e0 laquelle les r\u00e9ponses doivent \u00eatre envoy\u00e9es apr\u00e8s l\u2019authentification, l\u2019URI permettant d\u2019identifier votre application, etc&#8230; Une op\u00e9ration quasi \u00e9quivalente doit \u00eatre\u00a0effectu\u00e9e sur l&rsquo;application elle m\u00eame pour lui indiquer que fournisseur d\u2019identit\u00e9s est Azure AD.<\/em><\/p><\/blockquote>\n<h1>SAML ?<\/h1>\n<p>Petite pr\u00e9sentation rapide (on reviendra plus en profondeur sur ce protocole dans un futur article):<br \/>\nLe langage <strong>SAML <\/strong>(Security Assertion Markup Language) est une norme XML permettant l&rsquo;\u00e9change de donn\u00e9es d&rsquo;authentification et d&rsquo;autorisation entre des domaines de s\u00e9curit\u00e9.\u00a0SAML est un standard support\u00e9 par un grand nombre de solutions.<br \/>\nCe protocole r\u00e9pond entre autre \u00e0 la probl\u00e9matique d\u2019authentification unique. Il est utilis\u00e9 dans notre cas pour f\u00e9d\u00e9rer des identit\u00e9s et fournir des m\u00e9canismes de SSO (SingleSign-On) aux applications qui permettent \u00e9ventuellement de prolonger les solutions de SSO au-del\u00e0 de l\u2019intranet (Application Cloud).<br \/>\nCela suppose que l&rsquo;utilisateur soit repr\u00e9sent\u00e9 par un compte pr\u00e9sent chez un fournisseur d&rsquo;identit\u00e9s (Azure AD dans notre cas, mais il pourrait tr\u00e8s bien \u00eatre pr\u00e9sent dans un AD local, et nous utiliserions alors des technologies ADFS\/ AADsync).<\/p>\n<p>Comme vous pouvez le constater sur le sch\u00e9ma ci dessous, le <strong>\u00ab\u00a0pivot\u00a0\u00bb<\/strong> est le poste client de l&rsquo;utilisateur. C&rsquo;est son navigateur, qui au travers d&rsquo;<strong>HTTP redirect<\/strong> va le diriger dans un premier temps vers le Service Provider (notre site), puis vers l&rsquo;Identity Provider (Azure AD) et \u00e0 nouveau vers le Service Provider. C&rsquo;est vers ce dernier qu&rsquo;il pr\u00e9sentera ce fameux \u00ab\u00a0jeton\u00a0\u00bb SAML fourni par notre Identity provider. Au del\u00e0 de la f\u00e9d\u00e9ration et donc l&rsquo;\u00e9change d&rsquo;information (m\u00e9tadonn\u00e9es)\u00a0 initi\u00e9 une fois (et rafra\u00eechit p\u00e9riodiquement) entre le SP et l&rsquo;IDP (repr\u00e9sent\u00e9e par RPT ci dessous), ces deux parties ne communiquent jamais entres elles directement lors d&rsquo;une phase d&rsquo;authentification.<\/p>\n<p><strong>Sch\u00e9ma repr\u00e9sentant le flux (passif) et les diff\u00e9rentes redirections du navigateur:<\/strong><\/p>\n<p><a href=\"http:\/\/remivernier.com\/index.php\/2018\/08\/21\/saml-azuread\/saml-azuread-img13\/\" rel=\"attachment wp-att-287\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-287\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img13.jpg\" alt=\"\" width=\"933\" height=\"488\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img13.jpg 933w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img13-300x157.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img13-768x402.jpg 768w\" sizes=\"auto, (max-width: 933px) 100vw, 933px\" \/><\/a><\/p>\n<h1 id=\"saml-protocol-requirements\" class=\"heading-with-anchor\"><span data-ttu-id=\"c09ae-131\">Configuration dans le portail AZURE<\/span><\/h1>\n<p>L&rsquo;ensemble de la configuration dans Azure s&rsquo;effectue via le portail\u00a0portal.azure.com \\ Azure Active Directory \\ Entreprise applications.<\/p>\n<p>Microsoft a pr\u00e9vu plusieurs cas d&rsquo;usage:<\/p>\n<ul>\n<li>L&rsquo;ajout de \u00ab\u00a0nos propres\u00a0\u00bb applications<\/li>\n<li>L&rsquo;ajout d\u2019application \u00e0 partir de la galerie<\/li>\n<\/ul>\n<p>Aujourd&rsquo;hui la partie qui va nous int\u00e9resser est celle qui nous permet d&rsquo;ajouter nos \u00ab\u00a0propres\u00a0\u00bb applications. Pas forcement celles que nous avons d\u00e9velopp\u00e9 mais plut\u00f4t celles qui ne sont pas dans la galerie (Add your own app):<\/p>\n<p><a href=\"http:\/\/remivernier.com\/index.php\/2018\/08\/21\/saml-azuread\/saml-azuread-img1\/\" rel=\"attachment wp-att-255\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-255\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img1.jpg\" alt=\"\" width=\"368\" height=\"305\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img1.jpg 549w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img1-300x249.jpg 300w\" sizes=\"auto, (max-width: 368px) 100vw, 368px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Un choix corn\u00e9lien s&rsquo;offre alors \u00e0 nous:<\/p>\n<ul>\n<li><strong>Application you&rsquo;re developping:<\/strong> Permet d&rsquo;inscrire une application native ou Web API via les protocoles OpenID-Connect\/O-Auth ou une application qui souhaite acc\u00e9der aux API Azure (Graph API par exemple).<\/li>\n<li><strong>On-premises application:<\/strong> Permet d&rsquo;inscrire un composant applicatif on-premise: Application Proxy Connector qui permet une authentification unique (SSO) et un acc\u00e8s distant s\u00e9curis\u00e9 pour les applications Web h\u00e9berg\u00e9es localement.<\/li>\n<li><strong>Non-gallery application:<\/strong> Permet d&rsquo;ajouter des applications dans le\u00a0lanceur d&rsquo;applications Office\u00a0365 (Authentification li\u00e9e) et la connexion par mot de passe au travers une extension de navigateur d\u00e9di\u00e9e. Cette derni\u00e8re section permet aussi de choisir l&rsquo;ajout d&rsquo;une application qui utilise le protocole SAML 2.0.<\/li>\n<\/ul>\n<h2>Cr\u00e9ation de l&rsquo;application<\/h2>\n<p>Comme indiqu\u00e9 pr\u00e9c\u00e9demment, la configuration d&rsquo;une \u00ab\u00a0non-gallery application\u00a0\u00bb impose d&rsquo;avoir une licence premium:<\/p>\n<p><a href=\"http:\/\/remivernier.com\/index.php\/2018\/08\/21\/saml-azuread\/saml-azuread-img2\/\" rel=\"attachment wp-att-262\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-262\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img2.jpg\" alt=\"\" width=\"226\" height=\"65\" \/><\/a><\/p>\n<p>Une fois la licence premium activ\u00e9e, l&rsquo;assistant de configuration nous demande un nom d&rsquo;application (il sera possible de le changer par la suite)<\/p>\n<p><a href=\"http:\/\/remivernier.com\/index.php\/2018\/08\/21\/saml-azuread\/saml-azuread-img5\/\" rel=\"attachment wp-att-263\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-263\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img5.jpg\" alt=\"\" width=\"299\" height=\"244\" \/><\/a><\/p>\n<h2>URL et Entity ID<\/h2>\n<p>Apr\u00e8s qu&rsquo;Azure ait cr\u00e9\u00e9 l&rsquo;application et affect\u00e9 un ID d\u2019application et d&rsquo;objet, la configuration s&rsquo;effectue dans l&rsquo;onglet Signle sign-on en s\u00e9lectionnant SAML-based Sing-on.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-328\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img6-1.jpg\" alt=\"\" width=\"870\" height=\"717\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img6-1.jpg 870w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img6-1-300x247.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img6-1-768x633.jpg 768w\" sizes=\"auto, (max-width: 870px) 100vw, 870px\" \/><\/p>\n<p><span data-ttu-id=\"5b4ef-134\">Nous pouvons alors entrer manuellement les valeurs ou charger un fichier de m\u00e9tadonn\u00e9es issu de notre application (metadata.xml dans Upload metadata file) pour pr\u00e9-remplir la valeur des champs.\u00a0<\/span>Je pr\u00e9f\u00e8re pour am\u00e9liorer la compr\u00e9hension de ce sujet, saisir \u00ab\u00a0\u00e0 la main\u00a0\u00bb les informations.<\/p>\n<p>2 informations principales sont requises et 2 optionnelles. Cocher \u00ab\u00a0Show advanced URL settings\u00a0\u00bb pour ces derni\u00e8res, nous allons renseigner les 3 premiers champs:<\/p>\n<ul>\n<li><strong>Identifier (Entity ID): <\/strong>Doit identifier de mani\u00e8re unique l\u2019application dans notre tenant AZURE AD. Cette valeur correspond \u00e0 l\u2019\u00e9l\u00e9ment ISSUER dans la demande SAML AuthRequest envoy\u00e9e par l\u2019application. Cette valeur appara\u00eet \u00e9galement comme l\u2019ID d\u2019entit\u00e9 dans les m\u00e9tadonn\u00e9es SAML fournies par l\u2019application (SP).<br \/>\n-&gt; https:\/\/monsite.test.local\/<\/li>\n<li><strong>Reply URL (Assertion Consumer Service URL):<\/strong> L&rsquo;URL de r\u00e9ponse est utilis\u00e9e\u00a0 l&rsquo;IDP pour rediriger l&rsquo;utilisateur apr\u00e8s authentification. C&rsquo;est l\u2019URL de o\u00f9 l\u2019application attend le jeton SAML.<br \/>\n-&gt;\u00a0https:\/\/monsite.test.local\/Shibboleth.sso\/SAML2\/POST<\/li>\n<li><strong>Sign on URL:\u00a0<\/strong>Si ce champ est renseign\u00e9, Azure AD utilise cette URL pour lancer l\u2019application \u00e0 partir du panneau d\u2019acc\u00e8s Azure AD: <a href=\"https:\/\/myapps.microsoft.com\/\">https:\/\/myapps.microsoft.com\/<\/a><br \/>\n-&gt;\u00a0https:\/\/monsite.test.local\/Shibboleth.sso\/Login<br \/>\nLanceur d&rsquo;application:<br \/>\n<a href=\"http:\/\/remivernier.com\/index.php\/2018\/08\/21\/saml-azuread\/saml-azuread-img9\/\" rel=\"attachment wp-att-270\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-270\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img9.jpg\" alt=\"\" width=\"548\" height=\"167\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img9.jpg 741w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img9-300x91.jpg 300w\" sizes=\"auto, (max-width: 548px) 100vw, 548px\" \/><\/a><\/li>\n<\/ul>\n<h2>Jeton SAML<\/h2>\n<p>Les URL de redirection et identifiant \u00e9tant maintenant renseign\u00e9s, il va falloir se focaliser sur ce qui sera pr\u00e9sent dans notre jeton. A minima, nous devons fournir un identificateur de l&rsquo;utilisateur.\u00a0 Il s&rsquo;agit d&rsquo;un identifiant unique appel\u00e9 NameID, forg\u00e9 dans le jeton en tant qu&rsquo;attribut \u00e0 destination de l&rsquo;application. Nous utilisons ici par d\u00e9faut l&rsquo;userprincipalname de l&rsquo;utilisateur mais le portail propose d&rsquo;utiliser un autre attribut. Cela pourrait \u00eatre par exemple un matricule identifiant l&rsquo;utilisateur dans une entreprise.<\/p>\n<p>Le NameID sera identifiable sous cette forme dans le jeton http:\/\/schemas.xmlsoap.org\/ws\/2005\/05\/identity\/claims\/nameidentifier (Namespace ou Claim type) et contiendra donc\u00a0utilisateur1@remivernierhotmail.onmicrosoft.com.<\/p>\n<p>Azure propose d&rsquo;ajouter d&rsquo;autres attributs dans le jeton. En cochant la case \u00ab\u00a0View and edit all other attributes\u00a0\u00bb nous pouvons en ajouter ou consulter ceux par d\u00e9faut. Ces informations proviennent d&rsquo;Azure AD mais elle pourraient provenir d&rsquo;un AD local qui serait synchronis\u00e9 via AADSync.<\/p>\n<p><a href=\"http:\/\/remivernier.com\/index.php\/2018\/08\/21\/saml-azuread\/saml-azuread-img14\/\" rel=\"attachment wp-att-295\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-295\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img14.jpg\" alt=\"\" width=\"495\" height=\"333\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img14.jpg 609w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img14-300x202.jpg 300w\" sizes=\"auto, (max-width: 495px) 100vw, 495px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h2>Metadata<\/h2>\n<p>Pour une interop\u00e9rabilit\u00e9 s\u00e9curis\u00e9e, les partenaires (SP et IDP) doivent partager leur propre m\u00e9tadonn\u00e9es afin que chaque partie connaisse l&rsquo;autre \u00e0 l&rsquo;avance. Ceci pour \u00e9tablir une base de confiance (Trust ou RPT). L&rsquo;id\u00e9al est d\u2019automatiser le processus de partage des m\u00e9tadonn\u00e9es \u00e0 travers un fichier XML public. Chaque entit\u00e9 rafra\u00eechi p\u00e9riodiquement le metadata de l&rsquo;autre.<\/p>\n<p>Ce fichier metadata doit contenir \u00e0 minima:<\/p>\n<ul>\n<li>Son Entity ID<\/li>\n<li>Les cl\u00e9 cryptographiques (voir plus bas)<\/li>\n<li>Les points de terminaisons (endpoint ou Assertion Consumer Service URL)<\/li>\n<\/ul>\n<p>Le medatata.xml de notre Idp est pr\u00e9sent dans le champs \u00ab\u00a0App Federation Metadata Url\u00a0\u00bb. Il sera \u00e0 importer cot\u00e9 SP. Il est dans Azure sous le format ci dessous ou <a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/partner-metadata.txt\" target=\"_blank\" rel=\"noopener\">t\u00e9l\u00e9chargeable<\/a>:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-344 size-full\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img28.jpg\" alt=\"\" width=\"513\" height=\"75\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img28.jpg 513w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img28-300x44.jpg 300w\" sizes=\"auto, (max-width: 513px) 100vw, 513px\" \/><\/p>\n<p>URL des metadadonn\u00e9es de l&rsquo;application:<br \/>\nhttps:\/\/login.microsoftonline.com\/93535e3e-9602-4158-afe0-d87fdeeeec9d\/federationmetadata\/2007-06\/federationmetadata.xml?<strong>appid=2b1cf0b0-f5e9-4c58-ab5d-1c6c7b7656ce<\/strong><\/p>\n<p><strong>Ou:<\/strong><br \/>\nappid=2b1cf0b0-f5e9-4c58-ab5d-1c6c7b7656ce (correspond \u00e0 notre ID d&rsquo;application)<\/p>\n<p><a href=\"http:\/\/remivernier.com\/index.php\/2018\/08\/21\/saml-azuread\/saml-azuread-img12\/\" rel=\"attachment wp-att-304\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-304\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img12.jpg\" alt=\"\" width=\"549\" height=\"41\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img12.jpg 857w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img12-300x22.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img12-768x56.jpg 768w\" sizes=\"auto, (max-width: 549px) 100vw, 549px\" \/><\/a><\/p>\n<p><strong>Et<\/strong><br \/>\n93535e3e-9602-4158-afe0-d87fdeeeec9d (correspond \u00e0 notre ID de r\u00e9pertoire \/ Tenant ID)<\/p>\n<p><a href=\"http:\/\/remivernier.com\/index.php\/2018\/08\/21\/saml-azuread\/saml-azuread-img11\/\" rel=\"attachment wp-att-306\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-306\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img11.jpg\" alt=\"\" width=\"209\" height=\"40\" \/><\/a><\/p>\n<h2>Certificats<\/h2>\n<p>Nous l\u2019avons vu plus haut, le client est le \u00ab\u00a0pivot\u00a0\u00bb. Pour \u00e9viter qu&rsquo;il puisse y avoir une compromission du jeton par ce dernier, le message pr\u00e9sent dans le jeton SAML doit \u00eatre sign\u00e9 num\u00e9riquement par l&rsquo;\u00e9metteur (IDP). Pour v\u00e9rifier la signature du message, le destinataire du message (SP) utilise une cl\u00e9 publique connue et appartenant \u00e0 l&rsquo;\u00e9metteur (IDP). De m\u00eame, il est aussi possible de chiffrer un message. Dans les deux situations,\u00a0les cl\u00e9 cryptographiques publiques doivent \u00eatre partag\u00e9es \u00e0 l&rsquo;avance (via le metadata pr\u00e9c\u00e9demment \u00e9voqu\u00e9).<\/p>\n<p>Le message peut \u00eatre de la forme:<\/p>\n<ul>\n<li><strong>SAML REQUEST<\/strong>: \u00e9mis par le SP. Il <strong>peut \u00eatre<\/strong> sign\u00e9 par le SP et cette signature doit \u00eatre v\u00e9rifi\u00e9e par l&rsquo;IDP.<\/li>\n<li><strong>SAML RESPONSE<\/strong>: \u00e9mis par l&rsquo;IDP. Il <strong>doit \u00eatre<\/strong> sign\u00e9 par l&rsquo;IDP\u00a0 et cette signature doit \u00eatre v\u00e9rifi\u00e9e par le SP.<\/li>\n<\/ul>\n<p>Dans notre cas, et par d\u00e9faut, l&rsquo;IDP (Azure AD) signera en SHA-256 les jetons SAML (Sign SAML assertion). Cette signature devra donc \u00eatre v\u00e9rifi\u00e9e par notre application (SP).<\/p>\n<p><a href=\"http:\/\/remivernier.com\/index.php\/2018\/08\/21\/saml-azuread\/saml-azuread-img15\/\" rel=\"attachment wp-att-297\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-297\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img15.jpg\" alt=\"\" width=\"502\" height=\"352\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img15.jpg 606w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img15-300x210.jpg 300w\" sizes=\"auto, (max-width: 502px) 100vw, 502px\" \/><\/a><\/p>\n<p>Les certificats ont une dur\u00e9e de vie, et doivent donc \u00eatre p\u00e9riodiquement renouvel\u00e9s. Le certificat automatiquement g\u00e9n\u00e9r\u00e9 a une dur\u00e9e de vie de 3 ans, mais il est plut\u00f4t conseill\u00e9 de la porter \u00e0 un an. Nous voyons ici l&rsquo;importance d&rsquo;automatiser la consultation des metadonn\u00e9es. Si \u00e7a n&rsquo;est pas le cas les certificats publics devrons \u00eatre d\u00e9ploy\u00e9s \u00ab\u00a0\u00e0 la main\u00a0\u00bb et cela provoquera une interruption de service pour l&rsquo;application.<\/p>\n<p>Une fois l&rsquo;ensemble de la configuration sauvegard\u00e9e, nous sommes pr\u00eat \u00e0 configurer l&rsquo;application (SP).<\/p>\n<h2>Cr\u00e9ation de l&rsquo;utilisateur de test<\/h2>\n<p>Nous l&rsquo;avons vu plus haut que pour qu&rsquo;un utilisateur s&rsquo;authentifie, il\u00a0doit \u00eatre repr\u00e9sent\u00e9 par un compte pr\u00e9sent chez un fournisseur d&rsquo;identit\u00e9: Azure AD. Il nous faut donc cr\u00e9er un compte sans droits particulier:\u00a0utilisateur1@remivernierhotmail.onmicrosoft.com.<\/p>\n<p><a href=\"http:\/\/remivernier.com\/index.php\/2018\/08\/21\/saml-azuread\/saml-azuread-img17\/\" rel=\"attachment wp-att-317\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-317\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img17.jpg\" alt=\"\" width=\"765\" height=\"56\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img17.jpg 983w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img17-300x22.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img17-768x56.jpg 768w\" sizes=\"auto, (max-width: 765px) 100vw, 765px\" \/><\/a><\/p>\n<p>Et l&rsquo;ajouter comme utilisateur habilit\u00e9 \u00e0 utiliser l&rsquo;application dans \u00ab\u00a0Users and Groups\u00a0\u00bb.<\/p>\n<p><a href=\"http:\/\/remivernier.com\/index.php\/2018\/08\/21\/saml-azuread\/saml-azuread-img8\/\" rel=\"attachment wp-att-318\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-318\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img8.jpg\" alt=\"\" width=\"775\" height=\"264\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img8.jpg 993w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img8-300x102.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img8-768x261.jpg 768w\" sizes=\"auto, (max-width: 775px) 100vw, 775px\" \/><\/a><\/p>\n<p>Cette derni\u00e8re \u00e9tape est n\u00e9cessaire car l&rsquo;option\u00a0 \u00ab\u00a0User assigment required\u00a0\u00bb est activ\u00e9e.<\/p>\n<p><a href=\"http:\/\/remivernier.com\/index.php\/2018\/08\/21\/saml-azuread\/saml-azuread-img18\/\" rel=\"attachment wp-att-319\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-319\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img18.jpg\" alt=\"\" width=\"782\" height=\"759\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img18.jpg 782w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img18-300x291.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img18-768x745.jpg 768w\" sizes=\"auto, (max-width: 782px) 100vw, 782px\" \/><\/a><\/p>\n<h1 id=\"saml-protocol-requirements\" class=\"heading-with-anchor\"><span data-ttu-id=\"c09ae-131\">Configuration de l&rsquo;application:\u00a0Shibboleth SP<\/span><\/h1>\n<p>Nous allons utiliser comme Service Provider l&rsquo;application\u00a0Shibboleth SP. 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 <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&rsquo;installation 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&#8211;\u00a0<strong>shibboleth2.xml<\/strong> qui contient la configuration g\u00e9n\u00e9rale de\u00a0Shibboleth<br \/>\n&#8211; <strong>attribute-map.xml<\/strong>\u00a0qui contient la translation des noms d&rsquo;attributs contenus dans les assertions SAML envoy\u00e9es par l&rsquo;IdP vers des en-t\u00eates HTTP exploitables par l&rsquo;application finale.<br \/>\n&#8211;\u00a0<strong>keygen.bat <\/strong>qu&rsquo;il faudra ex\u00e9cuter pour g\u00e9n\u00e9rer une nouvelle paire de cl\u00e9s (Signature et Encryption sur SP). Non utilis\u00e9 dans ce sc\u00e9nario puisque seul la SAML RESPONSE est sign\u00e9e par l&rsquo;IDP.<br \/>\n&#8211;\u00a0<strong>partner-metadata.xml<\/strong> est le metadata de l&rsquo;IDP t\u00e9l\u00e9charg\u00e9 dans notre application Azure AD et renomm\u00e9.<\/li>\n<li><strong>C:\\opt\\shibboleth-sp\\var\\log\\shibboleth<\/strong> qui contient les fichiers de logs et notamment\u00a0shibd.log<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>Fichier\u00a0<strong>shibboleth2.xml<\/strong><\/h2>\n<p><strong>Original:<\/strong><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-341 size-full\" 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\" \/><\/p>\n<p><strong>A remplacer par:<\/strong><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-334\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img20.jpg\" alt=\"\" width=\"675\" height=\"128\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img20.jpg 675w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img20-300x57.jpg 300w\" sizes=\"auto, (max-width: 675px) 100vw, 675px\" \/><\/p>\n<p>l&rsquo;id doit correspondre \u00e0 l&rsquo;ID du site IIS:<br \/>\n<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\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Original:<\/strong><br \/>\n<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\" \/><\/p>\n<p><strong>A remplacer par:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-336\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img22.jpg\" alt=\"\" width=\"698\" height=\"160\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img22.jpg 698w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img22-300x69.jpg 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Original:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-337 size-full\" 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\" \/><\/strong><\/p>\n<p><strong>A remplacer par:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-338 size-full\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img24.jpg\" alt=\"\" width=\"1050\" height=\"515\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img24.jpg 1050w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img24-300x147.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img24-768x377.jpg 768w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img24-1024x502.jpg 1024w\" sizes=\"auto, (max-width: 1050px) 100vw, 1050px\" \/><\/strong><\/p>\n<p>L&rsquo;<strong>ApplicationDefaults<\/strong> <strong>EntityID<\/strong> (Identifier) doit correspondre \u00e0 celui qui est renseign\u00e9 dans Azure AD. Nous ajoutons ici une r\u00e9f\u00e9rence \u00e0 la possibilit\u00e9 de signer les SAML REQUEST ou chiffrer la cha\u00eene avec les certificats pr\u00e9sents et inscrits dans le metadata cot\u00e9 SP. Nous n&rsquo;utiliserons pas ici cette fonctionnalit\u00e9.<\/p>\n<p>Le <strong>SSO<\/strong> <strong>EntityID<\/strong>\u00a0 correspond \u00e0 l&rsquo;entityID pr\u00e9sent dans le metadata de l&rsquo;IDP t\u00e9l\u00e9chargeable dans l&rsquo;application Azure AD:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-344 size-full\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img28.jpg\" alt=\"\" width=\"513\" height=\"75\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img28.jpg 513w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img28-300x44.jpg 300w\" sizes=\"auto, (max-width: 513px) 100vw, 513px\" \/><\/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, Azure AD ne poss\u00e9dant pas cette fonctionnalit\u00e9 de d\u00e9couverte.<\/p>\n<p>Enfin, nous supprimons l&rsquo;acl 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&rsquo;indiquer \u00e0 Shibboleth de mapper les attributs pr\u00e9sents dans notre jeton SAML avec des id que nous pourrions r\u00e9cup\u00e9rer sous forme de variable si nous d\u00e9veloppions une application compl\u00e8te.<\/p>\n<p>Nous pouvons supprimer l&rsquo;ensemble des exemples pr\u00e9sents par d\u00e9faut dans ce fichier xml et le remplacer par ce qui est pr\u00e9sents dans notre jeton SAML:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-349\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img29.jpg\" alt=\"\" width=\"1228\" height=\"216\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img29.jpg 1228w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img29-300x53.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img29-768x135.jpg 768w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img29-1024x180.jpg 1024w\" sizes=\"auto, (max-width: 1228px) 100vw, 1228px\" \/><\/p>\n<h2>Ex\u00e9cution<strong>\u00a0du keygen.bat<\/strong><\/h2>\n<p>Dans ce sc\u00e9nario, nous n&rsquo;utilisons pas la possibilit\u00e9 de signer les SAML REQUEST ou chiffrer la cha\u00eene avec les certificats pr\u00e9sents et inscrits dans le metadata cot\u00e9 SP. Malgr\u00e9 tout si le besoin s&rsquo;en faisait sentir ou tout simplement pour avoir un metadata cot\u00e9 SP propre, il nous faut ex\u00e9cuter en tant qu&rsquo;admin les commandes ci dessous dans un \u00ab\u00a0cmd\u00a0\u00bb:<\/p>\n<p>C:\\opt\\shibboleth-sp\\etc\\shibboleth&gt; <strong>keygen.bat -h monsite.test.local -e https:\/\/monsite.test.local -f -n sp-encrypt<\/strong><br \/>\nC:\\opt\\shibboleth-sp\\etc\\shibboleth&gt; <strong>keygen.bat -h monsite.test.local -e https:\/\/monsite.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 &#8211; correspond \u00e0 la cl\u00e9 publique du certificat d&rsquo;encryption cot\u00e9 SP<\/li>\n<li>sp-encrypt-key.pem\u00a0&#8211; correspond \u00e0 la cl\u00e9 priv\u00e9e du certificat d&rsquo;encryption cot\u00e9 SP<\/li>\n<li>sp-signing-cert.pem\u00a0&#8211; correspond \u00e0 la cl\u00e9 publique du certificat de signature cot\u00e9 SP<\/li>\n<li>sp-signing-key.pem &#8211; 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> en fait r\u00e9f\u00e9rence ci dessous<strong> :<br \/>\n<\/strong><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-350 size-full\" 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\" \/><\/p>\n<h2><strong>Fichier partner-metadata.xml<\/strong><\/h2>\n<p>Il s&rsquo;agit ni plus ni moins des m\u00e9tadonn\u00e9es de notre IDP cot\u00e9 Azure AD, t\u00e9l\u00e9chargeable en cliquant sur le lien Metadata XML. Ce fichier est \u00e0 copier dans\u00a0C:\\opt\\shibboleth-sp\\etc\\shibboleth et \u00e0 renommer\u00a0<a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/partner-metadata.txt\" target=\"_blank\" rel=\"noopener\">partner-metadata.xml<\/a><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-344\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img28.jpg\" alt=\"\" width=\"513\" height=\"75\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img28.jpg 513w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img28-300x44.jpg 300w\" sizes=\"auto, (max-width: 513px) 100vw, 513px\" \/><\/p>\n<p>L&rsquo;ensemble 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\u00a0<a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/Log-demarage-Shibboleth.txt\">C:\\opt\\shibboleth-sp\\var\\log\\shibboleth\\shibd.log<\/a> doit nous indiquer aucune erreur au d\u00e9marrage.<\/p>\n<p>&nbsp;<\/p>\n<h1>Test du sc\u00e9nario<\/h1>\n<p>Lancer avec Internet explorer par exemple l&rsquo;URL:\u00a0https:\/\/monsite.test.local\/Shibboleth.sso\/Login<\/p>\n<p>Le Service Provider doit nous transmettre un SAML REQUEST et nous rediriger vers l&rsquo;URL indiqu\u00e9e dans AssertionConsumerServiceURL (URL de l&rsquo;IDP).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-358\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img31.jpg\" alt=\"\" width=\"624\" height=\"141\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img31.jpg 624w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img31-300x68.jpg 300w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><br \/>\n(Pour obtenir le contenu du jeton, je vous invite \u00e0 aller consulter l&rsquo;article: <a href=\"http:\/\/remivernier.com\/index.php\/2018\/08\/21\/outils-danalyse-reseau\/\">Outils d&rsquo;analyse r\u00e9seau<\/a>).<\/p>\n<p>Une fois redirig\u00e9 vers l&rsquo;IDP (Azure AD), ce dernier doit nous demander un login et un mot de passe correspondant \u00e0 notre utilisateur\u00a0utilisateur1@remivernierhotmail.onmicrosoft.com, il doit nous authentifier et nous remettre une <a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/SAML-RESPONSE.txt\" target=\"_blank\" rel=\"noopener\">SAML RESPONSE<\/a> (Le fichier \u00e9tant un peu gros, vous le trouverez en suivant le lien).<\/p>\n<p>Le SAML RESPONSE est alors transmis par le client au SP qui vient le lire et r\u00e9cup\u00e9rer les assertions.<br \/>\nLa page,\u00a0https:\/\/monsite.test.local\/Shibboleth.sso\/Session nous affiche les attribut mapp\u00e9s (configur\u00e9s pr\u00e9c\u00e9demment dans le fichier\u00a0attribute-map.xml)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-360\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img32.jpg\" alt=\"\" width=\"1072\" height=\"252\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img32.jpg 1072w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img32-300x71.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img32-768x181.jpg 768w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img32-1024x241.jpg 1024w\" sizes=\"auto, (max-width: 1072px) 100vw, 1072px\" \/><\/p>\n<p>En parall\u00e8le\u00a0C:\\opt\\shibboleth-sp\\var\\log\\shibboleth\\shibd.log doit nous indiquer une trace de cette authentification:<\/p>\n<p>INFO Shibboleth.SessionCache [1] [default]: new session created: ID (_60e90f08a8b5b050e1ee0e64671e2451) IdP (https:\/\/sts.windows.net\/93535e3e-9602-4158-afe0-d87fdeeeec9d\/) Protocol(urn:oasis:names:tc:SAML:2.0:protocol) Address (10.203.250.138)<\/p>\n<p>&nbsp;<\/p>\n<p>J&rsquo;ai enregistr\u00e9 le sc\u00e9nario complet dans l&rsquo;animation ci apr\u00e8s. Il faut cliquer sur l&rsquo;image pour la lancer:<\/p>\n<p><a href=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-ann2.gif\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-367\" src=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img33-300x156.jpg\" alt=\"\" width=\"300\" height=\"156\" srcset=\"https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img33-300x156.jpg 300w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img33-768x399.jpg 768w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img33-1024x532.jpg 1024w, https:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-img33.jpg 1106w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans cet article nous allons voir quels sont les diff\u00e9rentes applications et type d&rsquo;applications pr\u00e9sentes sous Azure AD et plus pr\u00e9cis\u00e9ment l&rsquo;ajout d&rsquo;une application fonctionnant sur le protocole SAML 2.0. Globalement, le portail Azure propose plusieurs type d&rsquo;applications, pour plusieurs sc\u00e9narios.\u00a0Les applications sont ajout\u00e9es \u00e0 Azure AD pour exploiter un ou plusieurs des services fournis,<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,20,36,47],"tags":[30,27,28,33,6,31,29,32,34],"class_list":["post-247","post","type-post","status-publish","format-standard","hentry","category-azure","category-azure-ad","category-saml","category-shibboleth-protocoles","tag-authentification","tag-azure","tag-identite","tag-identity-provider","tag-iis","tag-protocole","tag-saml","tag-service-provider","tag-shibboleth"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.8.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Int\u00e9grer une application utilisant le protocole SAML 2.0 \u00e0 Azure AD - R\u00e9mi VERNIER<\/title>\n<meta name=\"description\" content=\"Dans cet article nous allons voir quels sont les diff\u00e9rentes applications et type d&#039;applications pr\u00e9sentes sous Azure AD et plus pr\u00e9cis\u00e9ment l&#039;ajout d&#039;une application fonctionnant sur le protocole SAML 2.0.\" \/>\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\/08\/18\/saml-azuread\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Int\u00e9grer une application utilisant le protocole SAML 2.0 \u00e0 Azure AD - R\u00e9mi VERNIER\" \/>\n<meta property=\"og:description\" content=\"Dans cet article nous allons voir quels sont les diff\u00e9rentes applications et type d&#039;applications pr\u00e9sentes sous Azure AD et plus pr\u00e9cis\u00e9ment l&#039;ajout d&#039;une application fonctionnant sur le protocole SAML 2.0.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/remivernier.com\/index.php\/2018\/08\/18\/saml-azuread\/\" \/>\n<meta property=\"og:site_name\" content=\"R\u00e9mi VERNIER\" \/>\n<meta property=\"article:published_time\" content=\"2018-08-18T14:44:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-11-21T10:07:19+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-sch1.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=\"14 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\/08\/18\/saml-azuread\/\",\"url\":\"https:\/\/remivernier.com\/index.php\/2018\/08\/18\/saml-azuread\/\",\"name\":\"Int\u00e9grer une application utilisant le protocole SAML 2.0 \u00e0 Azure AD - R\u00e9mi VERNIER\",\"isPartOf\":{\"@id\":\"https:\/\/remivernier.com\/#website\"},\"datePublished\":\"2018-08-18T14:44:38+00:00\",\"dateModified\":\"2018-11-21T10:07:19+00:00\",\"author\":{\"@id\":\"https:\/\/remivernier.com\/#\/schema\/person\/a4c76c63a5a3d94454484845e42fc906\"},\"description\":\"Dans cet article nous allons voir quels sont les diff\u00e9rentes applications et type d'applications pr\u00e9sentes sous Azure AD et plus pr\u00e9cis\u00e9ment l'ajout d'une application fonctionnant sur le protocole SAML 2.0.\",\"breadcrumb\":{\"@id\":\"https:\/\/remivernier.com\/index.php\/2018\/08\/18\/saml-azuread\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/remivernier.com\/index.php\/2018\/08\/18\/saml-azuread\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/remivernier.com\/index.php\/2018\/08\/18\/saml-azuread\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/remivernier.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Int\u00e9grer une application utilisant le protocole SAML 2.0 \u00e0 Azure AD\"}]},{\"@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":"Int\u00e9grer une application utilisant le protocole SAML 2.0 \u00e0 Azure AD - R\u00e9mi VERNIER","description":"Dans cet article nous allons voir quels sont les diff\u00e9rentes applications et type d'applications pr\u00e9sentes sous Azure AD et plus pr\u00e9cis\u00e9ment l'ajout d'une application fonctionnant sur le protocole SAML 2.0.","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\/08\/18\/saml-azuread\/","og_locale":"fr_FR","og_type":"article","og_title":"Int\u00e9grer une application utilisant le protocole SAML 2.0 \u00e0 Azure AD - R\u00e9mi VERNIER","og_description":"Dans cet article nous allons voir quels sont les diff\u00e9rentes applications et type d'applications pr\u00e9sentes sous Azure AD et plus pr\u00e9cis\u00e9ment l'ajout d'une application fonctionnant sur le protocole SAML 2.0.","og_url":"https:\/\/remivernier.com\/index.php\/2018\/08\/18\/saml-azuread\/","og_site_name":"R\u00e9mi VERNIER","article_published_time":"2018-08-18T14:44:38+00:00","article_modified_time":"2018-11-21T10:07:19+00:00","og_image":[{"url":"http:\/\/remivernier.com\/wp-content\/uploads\/2018\/08\/saml-azuread-sch1.jpg"}],"author":"R\u00e9mi","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"R\u00e9mi","Dur\u00e9e de lecture estim\u00e9e":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/remivernier.com\/index.php\/2018\/08\/18\/saml-azuread\/","url":"https:\/\/remivernier.com\/index.php\/2018\/08\/18\/saml-azuread\/","name":"Int\u00e9grer une application utilisant le protocole SAML 2.0 \u00e0 Azure AD - R\u00e9mi VERNIER","isPartOf":{"@id":"https:\/\/remivernier.com\/#website"},"datePublished":"2018-08-18T14:44:38+00:00","dateModified":"2018-11-21T10:07:19+00:00","author":{"@id":"https:\/\/remivernier.com\/#\/schema\/person\/a4c76c63a5a3d94454484845e42fc906"},"description":"Dans cet article nous allons voir quels sont les diff\u00e9rentes applications et type d'applications pr\u00e9sentes sous Azure AD et plus pr\u00e9cis\u00e9ment l'ajout d'une application fonctionnant sur le protocole SAML 2.0.","breadcrumb":{"@id":"https:\/\/remivernier.com\/index.php\/2018\/08\/18\/saml-azuread\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/remivernier.com\/index.php\/2018\/08\/18\/saml-azuread\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/remivernier.com\/index.php\/2018\/08\/18\/saml-azuread\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/remivernier.com\/"},{"@type":"ListItem","position":2,"name":"Int\u00e9grer une application utilisant le protocole SAML 2.0 \u00e0 Azure AD"}]},{"@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\/247","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=247"}],"version-history":[{"count":88,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/posts\/247\/revisions"}],"predecessor-version":[{"id":399,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/posts\/247\/revisions\/399"}],"wp:attachment":[{"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/media?parent=247"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/categories?post=247"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/tags?post=247"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}