<!DOCTYPE html>
<html lang="fr" data-theme="light">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Module 03 — Hybride vs Cloud-only · Formation Entra ID · Atoo Next</title>
  <meta name="description" content="Synchronisation et authentification entre AD DS et Entra ID.">
  <meta name="color-scheme" content="light dark">
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Instrument+Serif:ital@0;1&family=JetBrains+Mono:wght@400;500&display=swap">
  <link rel="stylesheet" href="assets/shared.css">
</head>
<body class="layout-module">
  <a href="#main-content" class="skip-link">Aller au contenu principal</a>

  <!-- Sprite SVG (inline pour file://) -->
  <svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">
    <symbol id="icon-home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></symbol>
    <symbol id="icon-book-open" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 7v14"/><path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></symbol>
    <symbol id="icon-trending-up" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 7 13.5 15.5 8.5 10.5 2 17"/><polyline points="16 7 22 7 22 13"/></symbol>
    <symbol id="icon-award" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M15.477 12.89 17 22l-5-3-5 3 1.523-9.11"/><circle cx="12" cy="8" r="6"/></symbol>
    <symbol id="icon-settings" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/></symbol>
    <symbol id="icon-help-circle" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><path d="M12 17h.01"/></symbol>
    <symbol id="icon-menu" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><line x1="4" x2="20" y1="12" y2="12"/><line x1="4" x2="20" y1="6" y2="6"/><line x1="4" x2="20" y1="18" y2="18"/></symbol>
    <symbol id="icon-cloud" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z"/></symbol>
    <symbol id="icon-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></symbol>
    <symbol id="icon-check-circle" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></symbol>
    <symbol id="icon-x" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><line x1="18" x2="6" y1="6" y2="18"/><line x1="6" x2="18" y1="6" y2="18"/></symbol>
    <symbol id="icon-refresh-cw" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"/><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10"/></symbol>
    <symbol id="icon-star" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></symbol>
    <symbol id="icon-chevron-right" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></symbol>
    <symbol id="icon-arrow-left" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><line x1="19" x2="5" y1="12" y2="12"/><polyline points="12 19 5 12 12 5"/></symbol>
    <symbol id="icon-arrow-right" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><line x1="5" x2="19" y1="12" y2="12"/><polyline points="12 5 19 12 12 19"/></symbol>
    <symbol id="icon-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"/></symbol>
    <symbol id="icon-sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="4"/><path d="M12 2v2"/><path d="M12 20v2"/><path d="m4.93 4.93 1.41 1.41"/><path d="m17.66 17.66 1.41 1.41"/><path d="M2 12h2"/><path d="M20 12h2"/><path d="m6.34 17.66-1.41 1.41"/><path d="m19.07 4.93-1.41 1.41"/></symbol>
    <symbol id="icon-alert-triangle" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"/><path d="M12 9v4"/><path d="M12 17h.01"/></symbol>
    <symbol id="icon-info" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></symbol>
    <symbol id="icon-key-round" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z"/></symbol>
    <symbol id="icon-lightbulb" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"/><path d="M9 18h6"/><path d="M10 22h4"/></symbol>
    <symbol id="icon-sparkles" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"/><path d="M20 3v4"/><path d="M22 5h-4"/><path d="M4 17v2"/><path d="M5 18H3"/></symbol>
    <symbol id="icon-server" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><rect width="20" height="8" x="2" y="2" rx="2"/><rect width="20" height="8" x="2" y="14" rx="2"/><line x1="6" x2="6.01" y1="6" y2="6"/><line x1="6" x2="6.01" y1="18" y2="18"/></symbol>
    <symbol id="icon-graduation-cap" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M22 10v6M2 10l10-5 10 5-10 5z"/><path d="M6 12v5c3 3 9 3 12 0v-5"/></symbol>
    <symbol id="icon-flask-conical" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2"/><path d="M6.453 15h11.094"/><path d="M8.5 2h7"/></symbol>
    <symbol id="icon-target" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="6"/><circle cx="12" cy="12" r="2"/></symbol>
    <symbol id="icon-clock" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></symbol>
    <symbol id="icon-list" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><line x1="8" x2="21" y1="6" y2="6"/><line x1="8" x2="21" y1="12" y2="12"/><line x1="8" x2="21" y1="18" y2="18"/><line x1="3" x2="3.01" y1="6" y2="6"/><line x1="3" x2="3.01" y1="12" y2="12"/><line x1="3" x2="3.01" y1="18" y2="18"/></symbol>
    <symbol id="icon-external-link" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" x2="21" y1="14" y2="3"/></symbol>
  </svg>

  <button class="hamburger-btn" aria-label="Ouvrir le menu">
    <svg width="24" height="24"><use href="#icon-menu"/></svg>
  </button>

  <!-- Sidebar iconique -->
  <aside class="sidebar-icons" role="navigation" aria-label="Menu principal">
    <a href="javascript:void(0)" class="sidebar-icons__logo" aria-label="Accueil Atoo Next">
      <img src="assets/atoo-next-logo.svg" alt="Atoo Next">
    </a>
    <nav class="sidebar-icons__nav" aria-label="Navigation principale">
      <a href="javascript:void(0)" class="sidebar-icons__item" aria-label="Tableau de bord" title="Tableau de bord">
        <svg><use href="#icon-home"/></svg>
      </a>
      <a href="#module-content" class="sidebar-icons__item is-active" aria-label="Ce module" title="Ce module">
        <svg><use href="#icon-book-open"/></svg>
      </a>
      <a href="javascript:void(0)" class="sidebar-icons__item" aria-label="Progression" title="Progression">
        <svg><use href="#icon-trending-up"/></svg>
      </a>
      <a href="javascript:void(0)" class="sidebar-icons__item" aria-label="Certificat" title="Certificat">
        <svg><use href="#icon-award"/></svg>
      </a>
    </nav>
    <div class="sidebar-icons__footer">
      <a href="#" class="sidebar-icons__item" aria-label="Aide" title="Aide">
        <svg><use href="#icon-help-circle"/></svg>
      </a>
      <a href="#" class="sidebar-icons__item" aria-label="Paramètres" title="Paramètres">
        <svg><use href="#icon-settings"/></svg>
      </a>
    </div>
  </aside>

  <main class="module-main" id="main-content">
    <header class="module-topbar">
      <a href="javascript:void(0)" class="back-link">
        <svg><use href="#icon-arrow-left"/></svg>
        Retour au tableau de bord
      </a>
      <div class="module-topbar__actions">
        <button id="theme-toggle" class="btn-icon" aria-label="Basculer thème" aria-pressed="false">
          <svg width="20" height="20"><use href="#icon-moon"/></svg>
        </button>
      </div>
    </header>

    <div class="module-layout" id="module-content">
      <article class="module-content">
        <header class="module-header">
          <div class="module-header__visual module-header__visual--sky">
            <span class="module-header__number-huge">03</span>
            <div class="module-header__icon-large">
              <svg><use href="#icon-cloud"/></svg>
            </div>
          </div>
          <div class="module-header__meta">
            <span class="module-header__label">MODULE 03 · COURS</span>
            <h1 class="module-header__title">Hybride vs Cloud-only</h1>
            <p class="module-header__subtitle">Synchronisation & authentification entre AD DS et Entra ID.</p>
            <div class="module-header__stats">
              <div class="stat-mini"><span class="stat-mini__value">4h30</span><span class="stat-mini__label">durée</span></div>
              <div class="stat-mini"><span class="stat-mini__value" id="module-sections-count">21</span><span class="stat-mini__label">sections</span></div>
              <div class="stat-mini"><span class="stat-mini__value">10</span><span class="stat-mini__label">questions</span></div>
            </div>
          </div>
        </header>

        <!-- Section OBJECTIFS -->
        <section class="module-section module-section--objectifs" data-section-id="s-objectifs">
          <div class="section-header">
            <div class="icon-circle icon-circle--lg icon-circle--lavender">
              <svg><use href="#icon-target"/></svg>
            </div>
            <div class="section-header__content">
              <span class="section-header__label">OBJECTIFS</span>
              <h2 class="section-header__title">Ce que vous saurez faire</h2>
              <p class="section-header__meta">5 objectifs · ~5 min</p>
            </div>
          </div>
          <ul class="task-list">
            <li class="task-list__item"><span><strong>Comparer</strong> Entra Connect Sync (agent lourd) et Cloud Sync (agent léger) et choisir selon le contexte.</span></li>
            <li class="task-list__item"><span><strong>Expliquer</strong> les trois méthodes d'authentification hybride : PHS, PTA, Federation (ADFS), avec leurs dépendances.</span></li>
            <li class="task-list__item"><span><strong>Décrire</strong> le Seamless SSO et ses prérequis.</span></li>
            <li class="task-list__item"><span><strong>Identifier</strong> la source de vérité d'un objet (on-prem vs cloud) et les conséquences sur sa gestion.</span></li>
            <li class="task-list__item"><span><strong>Trancher</strong> hybride vs cloud-only à l'aide d'un arbre de décision.</span></li>
          </ul>
          <div class="content-block animate-on-scroll" style="margin-top:var(--space-6)">
            <h3>Compétences transférées depuis l'AD classique</h3>
            <div class="table-wrapper">
              <table>
                <thead><tr><th>L'admin AD réutilise</th><th>L'admin AD doit désapprendre</th></tr></thead>
                <tbody>
                  <tr><td>Maîtrise de l'AD source (users, attributs, UPN)</td><td>« Tout se gère sur le DC » — une partie bascule dans le cloud</td></tr>
                  <tr><td>Compréhension de Kerberos / NTLM</td><td>« L'auth se fait toujours en interne » — PHS valide dans le cloud</td></tr>
                  <tr><td>Notion de fédération / ADFS si déjà déployé</td><td>« ADFS est obligatoire » — PHS suffit dans la majorité des cas</td></tr>
                </tbody>
              </table>
            </div>
          </div>
        </section>

        <!-- Section COURS -->
        <section class="module-section module-section--cours">
          <div class="section-header">
            <div class="icon-circle icon-circle--lg icon-circle--sky">
              <svg><use href="#icon-book-open"/></svg>
            </div>
            <div class="section-header__content">
              <span class="section-header__label">COURS</span>
              <h2 class="section-header__title">Fondamentaux hybride / cloud</h2>
              <p class="section-header__meta">5 sections · lecture ~35 min</p>
            </div>
          </div>

          <!-- Sous-section 1 -->
          <div class="content-block animate-on-scroll" data-section-id="s-cours-1">
            <h3>1. Pourquoi l'hybride existe</h3>
            <div class="section-hook">
              <span class="section-hook__label">Contexte</span>
              Un ticket arrive : un nouveau collaborateur ne peut pas se connecter à Teams alors que son compte AD fonctionne. Vous soupçonnez la synchronisation. Encore faut-il comprendre ce qui se synchronise, et depuis où — c'est ce que couvre cette section.
            </div>
            <p>La plupart des organisations ne basculent pas d'un coup. Elles gardent leur <strong>AD DS on-prem</strong> (qui authentifie encore les postes joints au domaine, les partages, les apps legacy) <strong>et</strong> utilisent <strong>Entra ID</strong> pour M365 et le SaaS. L'<strong>hybride</strong> fait coexister les deux en <strong>synchronisant</strong> les identités de l'AD vers Entra.</p>
            <div class="ad-entra-grid">
              <div class="ad-entra-card ad-entra-card--ad">
                <div class="ad-entra-card__label"><svg width="14" height="14"><use href="#icon-server"/></svg> AD CLASSIQUE</div>
                <div class="ad-entra-card__body"><p>Votre AD reste la source pour les objets internes.</p></div>
              </div>
              <div class="ad-entra-card ad-entra-card--entra">
                <div class="ad-entra-card__label"><svg width="14" height="14"><use href="#icon-cloud"/></svg> ENTRA</div>
                <div class="ad-entra-card__body"><p>Reçoit une copie synchronisée des utilisateurs et groupes pour les services cloud.</p></div>
              </div>
            </div>
          </div>

          <!-- Sous-section 2 -->
          <div class="content-block animate-on-scroll" data-section-id="s-cours-2">
            <h3>2. Entra Connect Sync vs Cloud Sync</h3>
            <p>Deux moteurs pour synchroniser AD DS → Entra. Le choix impacte la topologie que vous pourrez couvrir.</p>
            <div class="table-wrapper">
              <table>
                <thead><tr><th></th><th>Entra Connect Sync (agent lourd)</th><th>Entra Cloud Sync (agent léger)</th></tr></thead>
                <tbody>
                  <tr><td><strong>Où tourne le moteur</strong></td><td>Serveur Windows dédié on-prem (+ SQL/LocalDB)</td><td>Léger agent(s) on-prem, logique dans le cloud</td></tr>
                  <tr><td><strong>Topologies complexes</strong></td><td>✅ (filtrage avancé, attributs étendus, writeback)</td><td>Limité (mais s'améliore)</td></tr>
                  <tr><td><strong>Multi-forêts</strong></td><td>✅</td><td>✅ (plusieurs agents)</td></tr>
                  <tr><td><strong>Résilience</strong></td><td>1 serveur actif (+ staging)</td><td>Plusieurs agents = tolérance native</td></tr>
                  <tr><td><strong>Écriture inverse</strong></td><td>Password, device, group writeback</td><td>Password writeback (selon évolutions)</td></tr>
                  <tr><td><strong>Maintenance</strong></td><td>À votre charge (mises à jour du serveur)</td><td>Allégée (logique côté Microsoft)</td></tr>
                  <tr><td><strong>Recommandation Microsoft</strong></td><td>Scénarios avancés / existants</td><td><strong>Nouveaux déploiements simples</strong></td></tr>
                </tbody>
              </table>
            </div>
            <aside class="callout callout--warning">
              <div class="callout__icon"><div class="icon-circle icon-circle--sm icon-circle--peach"><svg><use href="#icon-alert-triangle"/></svg></div></div>
              <div class="callout__content">
                <span class="callout__label">PIÈGE FRÉQUENT</span>
                <p>Installer Connect Sync parce que « c'est le plus connu » alors que Cloud Sync suffirait pour un besoin simple. Évaluer d'abord Cloud Sync.</p>
              </div>
            </aside>
            <div class="reveal-card">
              <button class="reveal-card__trigger" aria-controls="ade-cours2">
                <div class="icon-circle icon-circle--sm icon-circle--sky"><svg><use href="#icon-server"/></svg></div>
                <span class="reveal-card__title">Équivalent AD DS</span>
                <svg class="reveal-card__chevron" width="20" height="20"><use href="#icon-chevron-right"/></svg>
              </button>
              <div class="reveal-card__content" id="ade-cours2" role="region"><p>Il n'y a pas de « sync annuaire → cloud » dans un AD isolé. Le plus proche conceptuellement : un connecteur MIM/FIM sur mesure.</p></div>
            </div>
          </div>

          <!-- Sous-section 3 -->
          <div class="content-block animate-on-scroll" data-section-id="s-cours-3">
            <h3>3. Méthodes d'authentification</h3>
            <div class="section-hook">
              <span class="section-hook__label">À retenir</span>
              Synchroniser les <strong>objets</strong> ne dit pas <strong>où le mot de passe est validé</strong>. Trois options s'offrent à vous, chacune avec des dépendances différentes.
            </div>
            <h4>Password Hash Sync (PHS) — le défaut recommandé</h4>
            <ul>
              <li>Un <strong>hash du hash</strong> du mot de passe AD est synchronisé vers Entra.</li>
              <li>L'authentification est <strong>validée dans le cloud</strong> (Entra), sans contacter l'AD.</li>
              <li>Avantages : simple, résilient (fonctionne même si l'on-prem est down), prérequis d'Identity Protection.</li>
            </ul>
            <h4>Pass-through Authentication (PTA)</h4>
            <ul>
              <li>Le mot de passe est <strong>validé en temps réel par l'AD on-prem</strong> via des agents PTA.</li>
              <li>Aucun hash stocké dans le cloud.</li>
              <li>Dépendance : les agents PTA (et donc l'on-prem) doivent être disponibles pour se connecter.</li>
            </ul>
            <h4>Federation (ADFS)</h4>
            <ul>
              <li>L'authentification est <strong>déléguée</strong> à une infrastructure ADFS on-prem (ou tierce).</li>
              <li>La plus lourde à opérer (serveurs ADFS, WAP, certificats, haute dispo).</li>
              <li>Justifiée seulement par des exigences spécifiques (carte à puce complexe, règles de claim très fines).</li>
            </ul>
            <div class="table-wrapper">
              <table>
                <thead><tr><th>Critère</th><th>PHS</th><th>PTA</th><th>Federation (ADFS)</th></tr></thead>
                <tbody>
                  <tr><td>Validation du mot de passe</td><td>Cloud</td><td>On-prem (agents)</td><td>On-prem (ADFS)</td></tr>
                  <tr><td>Résiste à une panne on-prem</td><td>✅</td><td>❌</td><td>❌</td></tr>
                  <tr><td>Complexité</td><td>Faible</td><td>Moyenne</td><td>Élevée</td></tr>
                  <tr><td>Prérequis Identity Protection</td><td>✅</td><td>Partiel</td><td>Partiel</td></tr>
                  <tr><td>Recommandation</td><td><strong>Par défaut</strong></td><td>Si hash cloud interdit</td><td>Cas spécifiques</td></tr>
                </tbody>
              </table>
            </div>

            <figure class="mermaid-container animate-on-scroll" data-mermaid-source='sequenceDiagram
  participant U as Utilisateur
  participant E as Entra ID
  participant A as AD DS on-prem
  Note over U,A: PHS — validation dans le cloud
  U->>E: 1. Se connecte (mot de passe)
  E->>E: 2. Compare le hash local
  E-->>U: 3. Jeton (OK, l&#39;on-prem peut être down)
  Note over U,A: PTA — validation par agent on-prem
  U->>E: 1. Se connecte
  E->>A: 2. Agent PTA valide contre l&#39;AD
  A-->>E: 3. OK / KO
  E-->>U: 4. Jeton (impossible si on-prem down)
  Note over U,A: Federation — délégation ADFS
  U->>E: 1. Demande d&#39;accès
  E->>A: 2. Redirection vers ADFS
  A-->>U: 3. Authentification ADFS
  U->>E: 4. Assertion SAML
  E-->>U: 5. Jeton'>
              <div class="mermaid-render"><em class="text-muted">Chargement du schéma…</em></div>
              <figcaption class="mermaid-caption">Où se valide le mot de passe selon la méthode. PHS = cloud, PTA/Federation = on-prem.</figcaption>
            </figure>

            <div class="quickquestion animate-on-scroll" data-id="qq-choix-auth">
              <div class="quickquestion__label"><svg width="14" height="14"><use href="#icon-sparkles"/></svg> Question rapide</div>
              <p class="quickquestion__question">Votre PME n'a <strong>aucune contrainte réglementaire</strong> sur le stockage de hash de mots de passe. Quelle méthode d'authentification choisir en priorité ?</p>
              <button class="btn btn--soft-violet quickquestion__btn" type="button">Voir la réponse</button>
              <div class="quickquestion__answer">
                <strong>PHS (Password Hash Sync).</strong>
                <p class="quickquestion__explanation">C'est le défaut recommandé par Microsoft : simple à opérer, résilient à une panne on-prem, et prérequis d'Identity Protection pour la détection de fuite de mots de passe. PTA ne se justifie que si une politique interne interdit le stockage du hash dans le cloud ; ADFS uniquement pour des cas très spécifiques.</p>
              </div>
            </div>

            <div class="pairs-game animate-on-scroll" data-id="pairs-ad-cloud">
              <h3 class="pairs-game__title">Associer chaque concept AD DS à son pendant hybride/cloud</h3>
              <div class="pairs-game__grid">
                <div class="pairs-game__column">
                  <div class="pairs-game__column-title"><svg width="14" height="14"><use href="#icon-server"/></svg> AD DS</div>
                  <button class="pair-item" data-side="left" data-pair="p1">Contrôleur de domaine AD</button>
                  <button class="pair-item" data-side="left" data-pair="p2">SSO Kerberos intranet</button>
                  <button class="pair-item" data-side="left" data-pair="p3">Compte AD (source de vérité)</button>
                  <button class="pair-item" data-side="left" data-pair="p4">ADFS (validation on-prem)</button>
                </div>
                <div class="pairs-game__column">
                  <div class="pairs-game__column-title"><svg width="14" height="14"><use href="#icon-cloud"/></svg> Cloud / Entra</div>
                  <button class="pair-item" data-side="right" data-pair="p3">Objet Entra <code>onPremisesSyncEnabled=true</code></button>
                  <button class="pair-item" data-side="right" data-pair="p1">Agent Entra Connect / Cloud Sync</button>
                  <button class="pair-item" data-side="right" data-pair="p4">PHS (validation cloud)</button>
                  <button class="pair-item" data-side="right" data-pair="p2">Seamless SSO (poste joint AD)</button>
                </div>
              </div>
              <div class="pairs-game__status" role="status"></div>
              <div style="margin-top:var(--space-3)">
                <button class="btn btn--ghost btn--sm pairs-game__reset" type="button">
                  <svg width="14" height="14"><use href="#icon-refresh-cw"/></svg>
                  Réinitialiser
                </button>
              </div>
            </div>
          </div>

          <!-- Sous-section 4 -->
          <div class="content-block animate-on-scroll" data-section-id="s-cours-4">
            <h3>4. Seamless SSO</h3>
            <p><strong>Seamless Single Sign-On</strong> (SSSO) permet aux utilisateurs sur un <strong>poste joint au domaine AD</strong>, sur le réseau d'entreprise, de s'authentifier à Entra <strong>sans ressaisir</strong> leur mot de passe (ticket Kerberos en coulisse). Il complète PHS ou PTA (inutile avec Federation, qui gère le SSO autrement).</p>
            <div class="ad-entra-grid">
              <div class="ad-entra-card ad-entra-card--ad">
                <div class="ad-entra-card__label"><svg width="14" height="14"><use href="#icon-server"/></svg> AD CLASSIQUE</div>
                <div class="ad-entra-card__body"><p>Le SSO intranet via Kerberos vous est familier.</p></div>
              </div>
              <div class="ad-entra-card ad-entra-card--entra">
                <div class="ad-entra-card__label"><svg width="14" height="14"><use href="#icon-cloud"/></svg> ENTRA</div>
                <div class="ad-entra-card__body"><p>SSSO réutilise ce principe pour les apps cloud, tant que le poste est joint AD.</p></div>
              </div>
              <div class="ad-entra-card ad-entra-card--danger">
                <div class="ad-entra-card__label"><svg width="14" height="14"><use href="#icon-alert-triangle"/></svg> PIÈGE</div>
                <div class="ad-entra-card__body"><p>Attendre du SSSO qu'il fonctionne pour des postes <strong>joints Entra</strong> ou hors réseau. Il s'adresse aux postes <strong>joints AD DS</strong> sur le réseau interne. Pour les postes joints Entra, le SSO est natif via PRT.</p></div>
              </div>
            </div>
          </div>

          <!-- Sous-section 5 -->
          <div class="content-block animate-on-scroll" data-section-id="s-cours-5">
            <h3>5. Arbre de décision : hybride ou cloud-only ?</h3>
            <p>Un critère est décisif : la présence d'une dépendance persistante à l'AD DS (poste, serveur, application). Tant qu'elle existe, l'hybride est incontournable.</p>
            <figure class="mermaid-container animate-on-scroll" data-mermaid-source='flowchart TD
  Start["Point de départ : quelle cible ?"] --> Q1{"Des postes, serveurs ou apps<br>DOIVENT-ils rester joints<br>à l&#39;AD DS on-prem ?"}
  Q1 -- Oui --> H["<b>HYBRIDE</b><br>Garder l&#39;AD DS<br>+ synchro vers Entra"]
  Q1 -- Non --> Q2{"Contrainte réglementaire<br>interdisant de stocker<br>un hash de mot de passe<br>dans le cloud ?"}
  Q2 -- Oui --> PTA["<b>Hybride ciblé</b><br>Envisager PTA<br>+ MFA forte"]
  Q2 -- Non --> Cloud["<b>CLOUD-ONLY</b><br>Comptes créés dans Entra<br>MFA, Intune, CA<br>Plus d&#39;AD DS"]
  H --> H2["Sync : Cloud Sync si besoin simple,<br>sinon Connect Sync.<br>Auth : PHS par défaut,<br>PTA si hash interdit,<br>ADFS uniquement si exigence spécifique.<br>+ Seamless SSO"]
  classDef start fill:#A78BD9,color:#fff,stroke:#6B4FA0
  classDef hybride fill:#E8DFF5,stroke:#A78BD9,color:#2C2438
  classDef cloud fill:#B8E0C8,color:#2C2438,stroke:#5DAA7A
  classDef pta fill:#FCEBD9,stroke:#C88458,color:#2C2438
  class Start start
  class H,H2 hybride
  class Cloud cloud
  class PTA pta'>
              <div class="mermaid-render"><em class="text-muted">Chargement du schéma…</em></div>
              <figcaption class="mermaid-caption">Arbre de décision : un seul critère bloque le cloud-only — une dépendance persistante à l'AD DS.</figcaption>
            </figure>
            <p><strong>Règles de lecture :</strong></p>
            <ul>
              <li><strong>Postes/apps encore liés à l'AD DS</strong> → hybride obligatoire (pour l'instant).</li>
              <li><strong>Rien ne dépend plus de l'AD DS</strong> → viser <strong>cloud-only</strong> (cible du projet, à terme).</li>
              <li><strong>PHS par défaut</strong> ; PTA seulement si une politique interdit le hash dans le cloud ; ADFS en dernier recours.</li>
            </ul>
          </div>

          <!-- Sources -->
          <div class="content-block animate-on-scroll" data-section-id="s-cours-sources">
            <h3>Sources Microsoft Learn</h3>
            <ul>
              <li><a href="https://learn.microsoft.com/entra/identity/hybrid/connect/choose-ad-authn" target="_blank" rel="noopener">Choisir une méthode d'authentification <svg width="12" height="12" style="display:inline"><use href="#icon-external-link"/></svg></a></li>
              <li><a href="https://learn.microsoft.com/entra/identity/hybrid/cloud-sync/what-is-cloud-sync" target="_blank" rel="noopener">Entra Cloud Sync — vue d'ensemble <svg width="12" height="12" style="display:inline"><use href="#icon-external-link"/></svg></a></li>
              <li><a href="https://learn.microsoft.com/entra/identity/hybrid/connect/whatis-phs" target="_blank" rel="noopener">Password Hash Sync <svg width="12" height="12" style="display:inline"><use href="#icon-external-link"/></svg></a></li>
              <li><a href="https://learn.microsoft.com/entra/identity/hybrid/connect/how-to-connect-pta" target="_blank" rel="noopener">Pass-through Authentication <svg width="12" height="12" style="display:inline"><use href="#icon-external-link"/></svg></a></li>
              <li><a href="https://learn.microsoft.com/entra/identity/hybrid/connect/how-to-connect-sso" target="_blank" rel="noopener">Seamless SSO <svg width="12" height="12" style="display:inline"><use href="#icon-external-link"/></svg></a></li>
            </ul>
            <p class="text-muted" style="font-size:var(--fs-sm);margin-top:var(--space-3)"><em>Rappel : en cas d'écart entre ce support et le portail, le portail fait foi.</em></p>
          </div>
        </section>

        <!-- Section LAB -->
        <section class="module-section module-section--lab">
          <div class="section-header">
            <div class="icon-circle icon-circle--lg icon-circle--mint">
              <svg><use href="#icon-flask-conical"/></svg>
            </div>
            <div class="section-header__content">
              <span class="section-header__label">LAB</span>
              <h2 class="section-header__title">Lire l'état de synchronisation et décider</h2>
              <p class="section-header__meta">3 parties · TP guidé ~90 min · Portail : entra.microsoft.com</p>
            </div>
          </div>

          <aside class="callout callout--license animate-on-scroll">
            <div class="callout__icon"><div class="icon-circle icon-circle--sm icon-circle--lavender"><svg><use href="#icon-key-round"/></svg></div></div>
            <div class="callout__content">
              <span class="callout__label">LICENCES REQUISES EN PRODUCTION</span>
              <p><strong>✅ Inclus dans M365 E3 + Entra ID P2 :</strong> Entra Connect Sync et Cloud Sync (gratuits, inclus), PHS/PTA/Seamless SSO, lecture de l'état de synchronisation, choix de méthode d'auth.</p>
              <p><strong>⚠️ Nécessite E5 / add-on :</strong> — Néant.</p>
              <p><strong>🔬 Démo uniquement (tenant dev) :</strong> l'<strong>installation réelle</strong> d'un agent exige un <strong>AD DS source</strong> et un serveur Windows. Sur un tenant dev sans AD, cette partie est <strong>conceptuelle</strong> : on lit l'état, on n'installe pas d'agent.</p>
            </div>
          </aside>

          <div class="content-block animate-on-scroll" data-section-id="s-lab-a">
            <h3>Partie A — Lire l'état de synchronisation (30 min)</h3>
            <h4>1. Vérifier si la sync est activée</h4>
            <p><strong>Portail :</strong> <code>Entra admin center &gt; Identity &gt; Hybrid management &gt; Microsoft Entra Connect</code></p>
            <p>Sur un tenant dev neuf, la sync est <strong>désactivée</strong> (pas d'AD source). Constatez le statut et repérez l'emplacement.</p>
            <h4>2. Distinguer un objet cloud d'un objet synchronisé</h4>
            <p><strong>Portail :</strong> <code>Entra admin center &gt; Users &gt; [un user] &gt; Propriétés &gt; On-premises</code></p>
            <p>Les users seedés au module 01/02 sont <strong>cloud-only</strong>. En prod hybride, certains seraient marqués « synchronisés depuis on-premises ».</p>
            <h4>3. En PowerShell</h4>
            <pre><code>Connect-MgGraph -Scopes "Directory.Read.All","User.Read.All"
./scripts/03-sync-status.ps1</code></pre>
            <p>Le script affiche l'état global de la synchronisation d'annuaire et répartit les utilisateurs cloud-only vs synchronisés.</p>
          </div>

          <div class="content-block animate-on-scroll" data-section-id="s-lab-b">
            <h3>Partie B — Appliquer l'arbre de décision (40 min)</h3>
            <p>Pour chacun des deux scénarios, décidez : <strong>hybride ou cloud-only ?</strong>, <strong>quel moteur de sync ?</strong>, <strong>quelle méthode d'auth ?</strong> Justifiez avec l'arbre du cours.</p>
            <h4>Scénario 1 — L'éditeur de logiciels (votre PME)</h4>
            <ul>
              <li>30 postes récents, aucun serveur de fichiers legacy indispensable (partages migrables).</li>
              <li>Une app interne encore authentifiée en LDAP contre l'AD.</li>
              <li>Pas de contrainte réglementaire sur le stockage de hash.</li>
            </ul>
            <h4>Scénario 2 — Filiale avec contrainte réglementaire</h4>
            <ul>
              <li>Politique interne : interdiction de stocker tout hash de mot de passe hors du SI on-prem.</li>
              <li>Postes joints au domaine, présence forte sur le réseau interne.</li>
            </ul>
          </div>

          <div class="content-block animate-on-scroll" data-section-id="s-lab-c">
            <h3>Partie C — Restitution (20 min)</h3>
            <p>Comparez vos décisions avec le corrigé de l'évaluation. Identifiez ce qui, dans votre SI réel, empêche aujourd'hui le cloud-only (liste des dépendances AD DS restantes).</p>
            <aside class="callout callout--info">
              <div class="callout__icon"><div class="icon-circle icon-circle--sm icon-circle--sky"><svg><use href="#icon-info"/></svg></div></div>
              <div class="callout__content">
                <span class="callout__label">RÉSULTAT ATTENDU</span>
                <ul style="margin:var(--space-2) 0 0">
                  <li>Je sais où vérifier l'état de synchronisation dans le portail et en Graph.</li>
                  <li>Je distingue un objet cloud-only d'un objet synchronisé.</li>
                  <li>Scénario 1 : décision argumentée (hybride le temps de traiter l'app LDAP, PHS, Cloud Sync).</li>
                  <li>Scénario 2 : décision argumentée (PTA si hybride, ou cloud-only + MFA forte).</li>
                  <li>J'ai listé les dépendances AD DS réelles de mon SI.</li>
                </ul>
              </div>
            </aside>
          </div>
        </section>

        <!-- Section PIÈGES -->
        <section class="module-section module-section--pieges" data-section-id="s-pieges">
          <div class="section-header">
            <div class="icon-circle icon-circle--lg icon-circle--peach">
              <svg><use href="#icon-alert-triangle"/></svg>
            </div>
            <div class="section-header__content">
              <span class="section-header__label">PIÈGES CLASSIQUES</span>
              <h2 class="section-header__title">5 réflexes AD à corriger</h2>
              <p class="section-header__meta">Lecture ~10 min</p>
            </div>
          </div>

          <aside class="callout callout--warning animate-on-scroll">
            <div class="callout__icon"><div class="icon-circle icon-circle--sm icon-circle--peach"><svg><use href="#icon-alert-triangle"/></svg></div></div>
            <div class="callout__content">
              <span class="callout__label">PIÈGE 1 — CROIRE QUE SYNCHRONISER = AUTHENTIFIER</span>
              <p><strong>Le réflexe :</strong> penser que dès qu'on synchronise l'AD vers Entra, l'authentification est réglée.</p>
              <p><strong>Pourquoi c'est faux :</strong> la <strong>synchronisation des objets</strong> et la <strong>méthode d'authentification</strong> (PHS/PTA/Federation) sont deux décisions distinctes. On peut synchroniser sans choisir PHS.</p>
              <p><strong>La bonne pratique :</strong> décider explicitement <strong>où le mot de passe est validé</strong>. PHS par défaut.</p>
            </div>
          </aside>

          <aside class="callout callout--warning animate-on-scroll">
            <div class="callout__icon"><div class="icon-circle icon-circle--sm icon-circle--peach"><svg><use href="#icon-alert-triangle"/></svg></div></div>
            <div class="callout__content">
              <span class="callout__label">PIÈGE 2 — DÉPLOYER ADFS PAR RÉFLEXE SÉCURITÉ</span>
              <p><strong>Le réflexe :</strong> « la fédération, c'est plus sérieux, plus sécurisé ».</p>
              <p><strong>Pourquoi c'est faux :</strong> ADFS ajoute des serveurs, des certificats, une haute dispo à opérer, et une <strong>surface d'attaque</strong> (« Golden SAML »). Microsoft recommande PHS pour la majorité et la migration ADFS → PHS/PTA.</p>
              <p><strong>La bonne pratique :</strong> réserver ADFS aux exigences réellement spécifiques. Sinon PHS (+ SSSO).</p>
            </div>
          </aside>

          <aside class="callout callout--warning animate-on-scroll">
            <div class="callout__icon"><div class="icon-circle icon-circle--sm icon-circle--peach"><svg><use href="#icon-alert-triangle"/></svg></div></div>
            <div class="callout__content">
              <span class="callout__label">PIÈGE 3 — MODIFIER DANS ENTRA UN OBJET MAÎTRE ON-PREM</span>
              <p><strong>Le réflexe :</strong> corriger un attribut d'un compte synchronisé directement dans le portail Entra.</p>
              <p><strong>Pourquoi c'est faux :</strong> pour un objet synchronisé, <strong>l'AD est la source de vérité</strong> ; la modification cloud sera écrasée au cycle suivant.</p>
              <p><strong>La bonne pratique :</strong> modifier dans l'AD, laisser propager. Vérifier <code>onPremisesSyncEnabled</code> avant d'agir.</p>
            </div>
          </aside>

          <aside class="callout callout--warning animate-on-scroll">
            <div class="callout__icon"><div class="icon-circle icon-circle--sm icon-circle--peach"><svg><use href="#icon-alert-triangle"/></svg></div></div>
            <div class="callout__content">
              <span class="callout__label">PIÈGE 4 — ATTENDRE DU SEAMLESS SSO QU'IL MARCHE PARTOUT</span>
              <p><strong>Le réflexe :</strong> croire que SSSO gère le SSO de tous les postes, y compris hors réseau ou joints Entra.</p>
              <p><strong>Pourquoi c'est faux :</strong> SSSO cible les postes <strong>joints AD DS</strong> sur le <strong>réseau interne</strong> (Kerberos). Les postes joints Entra ont leur propre SSO (PRT), sans SSSO.</p>
              <p><strong>La bonne pratique :</strong> cartographier le type de jointure des postes (AD vs Entra vs hybride) avant de promettre du SSO.</p>
            </div>
          </aside>

          <aside class="callout callout--warning animate-on-scroll">
            <div class="callout__icon"><div class="icon-circle icon-circle--sm icon-circle--peach"><svg><use href="#icon-alert-triangle"/></svg></div></div>
            <div class="callout__content">
              <span class="callout__label">PIÈGE 5 — REPOUSSER INDÉFINIMENT LE CLOUD-ONLY</span>
              <p><strong>Le réflexe :</strong> « on est hybride, ça marche, on ne touche à rien ».</p>
              <p><strong>Pourquoi c'est faux :</strong> l'hybride est un <strong>état de transition</strong>, pas une cible. Il double la surface d'administration (AD + Entra) et maintient des dépendances (agents, serveurs).</p>
              <p><strong>La bonne pratique :</strong> tenir une <strong>liste des dépendances AD DS restantes</strong> et la réduire activement (apps, partages, postes) pour converger vers le cloud-only (module 08).</p>
            </div>
          </aside>
        </section>

        <!-- Section ÉVALUATION -->
        <section class="module-section module-section--eval" data-section-id="s-eval">
          <div class="section-header">
            <div class="icon-circle icon-circle--lg icon-circle--peach">
              <svg><use href="#icon-graduation-cap"/></svg>
            </div>
            <div class="section-header__content">
              <span class="section-header__label">ÉVALUATION</span>
              <h2 class="section-header__title">Testez vos acquis</h2>
              <p class="section-header__meta">10 questions QCM · cas pratique · ~20 min</p>
            </div>
          </div>

          <div class="content-block animate-on-scroll" style="text-align:center;padding:var(--space-8)">
            <p style="font-size:var(--fs-lg);color:var(--text-secondary);margin-bottom:var(--space-3)">Une évaluation interactive qui vous donne le badge <strong>Acquis</strong> (≥60%) ou <strong>Maîtrisé</strong> (≥80%).</p>
            <div class="eval-status" style="max-width:400px;margin:0 auto var(--space-4)">Évaluation non tentée.</div>
            <button class="btn btn--primary btn--lg qcm-launcher" type="button">
              <svg width="18" height="18"><use href="#icon-sparkles"/></svg>
              Lancer l'évaluation
            </button>
          </div>

          <div class="caspratique animate-on-scroll" data-id="cp-03-migration">
            <h3 class="caspratique__title">
              <svg width="24" height="24"><use href="#icon-graduation-cap"/></svg>
              Cas pratique — Migration de votre PME
            </h3>
            <div class="caspratique__statement">
              <p><strong>Contexte :</strong> votre PME (éditeur de logiciels) a 30 postes récents, une application interne encore authentifiée en <strong>LDAP</strong> contre l'AD, des partages réseau <strong>migrables</strong> vers SharePoint, et <strong>aucune</strong> contrainte réglementaire sur le stockage de hash.</p>
              <p><strong>Questions :</strong></p>
              <ol>
                <li>Faut-il partir en hybride ou cloud-only <strong>aujourd'hui</strong> ? Justifiez avec l'arbre de décision.</li>
                <li>Quel moteur de synchronisation et quelle méthode d'authentification recommandez-vous ?</li>
                <li>Quelle <strong>condition</strong> permettrait de passer en cloud-only plus tard ?</li>
              </ol>
            </div>
            <label class="caspratique__label" for="cp-textarea">Votre réponse :</label>
            <textarea id="cp-textarea" class="caspratique__textarea" placeholder="Rédigez votre démarche ici. Elle est sauvegardée automatiquement dans votre navigateur."></textarea>
            <div class="caspratique__actions">
              <button class="btn btn--soft-peach caspratique__reveal-btn" type="button">Voir la correction type</button>
              <button class="btn btn--ghost btn--sm caspratique__clear-btn" type="button">Effacer ma réponse</button>
            </div>
            <div class="caspratique__correction">
              <h4>Démarche attendue</h4>
              <ol>
                <li><strong>Hybride aujourd'hui.</strong> L'application interne en <strong>LDAP</strong> dépend de l'AD DS : tant qu'elle n'est pas remplacée ou réauthentifiée, l'AD doit rester, donc synchronisation vers Entra. L'arbre tranche « hybride » dès qu'une app ou un poste doit rester joint à l'AD.</li>
                <li><strong>Sync : Cloud Sync</strong> (besoin simple, PME, pas de topologie exotique) ; <strong>auth : PHS</strong> (pas de contrainte de hash, résilience à une panne on-prem, prérequis d'Identity Protection) ; ajouter <strong>Seamless SSO</strong> pour les postes encore joints AD.</li>
                <li><strong>Condition du cloud-only :</strong> avoir éliminé la dernière dépendance AD DS — ici, migrer ou réécrire l'app LDAP (ou la basculer sur OIDC/SAML) et finir la migration des partages vers SharePoint/OneDrive. Une fois ces dépendances levées, décommissionner l'AD (module 08).</li>
              </ol>
              <h4>Grille d'auto-évaluation</h4>
              <ul class="caspratique__checklist">
                <li><input type="checkbox" id="cp-1"> <label for="cp-1">A identifié la dépendance LDAP comme le point qui force l'hybride</label></li>
                <li><input type="checkbox" id="cp-2"> <label for="cp-2">A appliqué explicitement l'arbre de décision du cours</label></li>
                <li><input type="checkbox" id="cp-3"> <label for="cp-3">A choisi Cloud Sync plutôt que Connect Sync (besoin simple)</label></li>
                <li><input type="checkbox" id="cp-4"> <label for="cp-4">A choisi PHS (pas PTA, pas ADFS) et justifié (pas de contrainte hash)</label></li>
                <li><input type="checkbox" id="cp-5"> <label for="cp-5">A mentionné Seamless SSO pour les postes AD</label></li>
                <li><input type="checkbox" id="cp-6"> <label for="cp-6">A explicité la condition du cloud-only (élimination LDAP)</label></li>
                <li><input type="checkbox" id="cp-7"> <label for="cp-7">A évoqué la décommission de l'AD comme étape ultérieure (module 08)</label></li>
              </ul>
            </div>
          </div>
        </section>
      </article>

      <!-- Sidebar droite -->
      <aside class="module-sidebar-right" aria-label="Progression et sommaire">
        <div class="module-progress-card">
          <div class="module-progress-card__title">Ma progression</div>
          <div class="progress-donut progress-donut--module" data-value="0">
            <svg viewBox="0 0 120 120">
              <circle class="progress-donut__track" cx="60" cy="60" r="50"/>
              <circle class="progress-donut__fill" cx="60" cy="60" r="50" stroke-dasharray="314" stroke-dashoffset="314"/>
            </svg>
            <div class="progress-donut__label">
              <span class="progress-donut__value">0</span>
              <span class="progress-donut__unit">%</span>
            </div>
          </div>
          <div class="module-progress-card__stats">
            <div><strong class="module-progress-card__count">0 / 12</strong><br><span>sections lues</span></div>
          </div>
        </div>

        <nav class="module-toc" aria-label="Sommaire du module">
          <div class="module-toc__title">Sommaire</div>
          <ul class="module-toc__list">
            <li class="module-toc__item"><a class="module-toc__link" href="#s-objectifs" data-target="s-objectifs">Objectifs</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-cours-1" data-target="s-cours-1">1. Pourquoi l'hybride</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-cours-2" data-target="s-cours-2">2. Connect vs Cloud Sync</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-cours-3" data-target="s-cours-3">3. Méthodes d'auth</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-cours-4" data-target="s-cours-4">4. Seamless SSO</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-cours-5" data-target="s-cours-5">5. Arbre de décision</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-cours-sources" data-target="s-cours-sources">Sources</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-lab-a" data-target="s-lab-a">Lab · Partie A</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-lab-b" data-target="s-lab-b">Lab · Partie B</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-lab-c" data-target="s-lab-c">Lab · Partie C</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-pieges" data-target="s-pieges">Pièges classiques</a></li>
            <li class="module-toc__item"><a class="module-toc__link" href="#s-eval" data-target="s-eval">Évaluation</a></li>
          </ul>
        </nav>

        <div class="module-actions">
          <button class="btn btn--primary btn--full qcm-launcher" type="button">
            <svg width="16" height="16"><use href="#icon-sparkles"/></svg>
            Passer l'évaluation
          </button>
          <a class="btn btn--soft-violet btn--full" href="javascript:void(0)" onclick="if(window.ScormAPI){ScormAPI.terminate();}try{window.parent.location.reload();}catch(e){alert('Retournez sur Moodle pour le module suivant.');}return false;">
            Module suivant
            <svg width="16" height="16"><use href="#icon-arrow-right"/></svg>
          </a>
        </div>
      </aside>
    </div>
  </main>

  <footer class="site-footer">
    <div class="site-footer__brand">
      <img src="assets/atoo-next-logo.svg" alt="Atoo Next">
      <span class="site-footer__tag">La connexion commence ici</span>
    </div>
    <div>Module 03 · Formation Microsoft Entra ID</div>
  </footer>

  <!-- Modale QCM -->
  <div class="modal-overlay" id="qcm-modal" role="dialog" aria-modal="true" aria-labelledby="qcm-modal-title">
    <div class="modal" tabindex="-1">
      <header class="modal__header">
        <h2 id="qcm-modal-title" style="margin:0;font-size:var(--fs-xl)">Évaluation — Hybride vs Cloud-only</h2>
        <button class="modal__close" aria-label="Fermer">
          <svg><use href="#icon-x"/></svg>
        </button>
      </header>
      <div class="modal__body"></div>
      <footer class="modal__footer"></footer>
    </div>
  </div>

  <script>window.__SCORM_CONTEXT__ = true;</script>
  <script>
    window.MODULE_ID = '03-hybride-vs-cloud';
    window.MODULE_NUM = '03';
    window.MODULE_STORAGE_KEY = 'formation-entra:module-03';
    window.MODULE_TITLE = 'Hybride vs Cloud-only';

    window.QCM_DATA = {
      module: '03-hybride-vs-cloud',
      titre: 'Évaluation — Hybride vs Cloud-only',
      seuils: { acquis: 60, maitrise: 80 },
      questions: [
        { id: 'q1', type: 'single', enonce: 'Quelle méthode d\'authentification hybride valide le mot de passe **dans le cloud** ?', reference_cours: 'Section 3 — Méthodes d\'authentification',
          choix: [
            { id: 'a', texte: 'Federation (ADFS)', correct: false, feedback_si_choisi: 'ADFS délègue la validation à l\'infrastructure de fédération on-prem, pas au cloud.' },
            { id: 'b', texte: 'Pass-through Authentication', correct: false, feedback_si_choisi: 'PTA envoie la validation à un agent installé on-prem. Le cloud transmet la demande, il ne valide pas.' },
            { id: 'c', texte: 'Password Hash Sync', correct: true },
            { id: 'd', texte: 'Seamless SSO', correct: false, feedback_si_choisi: 'Le SSO transparent est un mécanisme de confort (pas de re-saisie), pas une méthode d\'authentification à part entière.' }
          ],
          explication: 'PHS synchronise un hash du hash du mot de passe vers Entra ID. C\'est donc Entra qui valide la connexion, dans le cloud — méthode recommandée par Microsoft pour la majorité des cas.'
        },
        { id: 'q2', type: 'single', enonce: 'Un incident coupe l\'accès à l\'AD on-prem. Avec quelle méthode les utilisateurs peuvent **encore** se connecter à M365 ?', reference_cours: 'Section 3 — PHS',
          choix: [
            { id: 'a', texte: 'PTA', correct: false, feedback_si_choisi: 'PTA nécessite les agents on-prem pour valider — coupés en cas d\'incident.' },
            { id: 'b', texte: 'Federation', correct: false, feedback_si_choisi: 'ADFS est on-prem : sans lui, la fédération est inopérante.' },
            { id: 'c', texte: 'PHS', correct: true },
            { id: 'd', texte: 'Aucune', correct: false, feedback_si_choisi: 'PHS valide côté cloud, indépendamment de l\'état de l\'on-prem.' }
          ],
          explication: 'Seul PHS valide dans le cloud : le hash est stocké côté Entra, la connexion aboutit même si l\'AD on-prem est indisponible. C\'est un argument fort de résilience.'
        },
        { id: 'q3', type: 'single', enonce: 'Pour un nouveau déploiement simple, quel moteur de synchronisation Microsoft recommande-t-il en premier examen ?', reference_cours: 'Section 2 — Connect vs Cloud Sync',
          choix: [
            { id: 'a', texte: 'Entra Connect Sync (agent lourd)', correct: false, feedback_si_choisi: 'Connect Sync reste utile pour les topologies complexes (multi-forêts avancées, writeback poussé). Pour un besoin simple, Cloud Sync suffit.' },
            { id: 'b', texte: 'Entra Cloud Sync (agent léger)', correct: true },
            { id: 'c', texte: 'MIM', correct: false, feedback_si_choisi: 'MIM (Microsoft Identity Manager) est un produit distinct pour des scénarios sur mesure, pas la voie recommandée par défaut.' },
            { id: 'd', texte: 'Un script LDAP maison', correct: false, feedback_si_choisi: 'Développer sa propre sync introduit des risques (fiabilité, sécurité) sans bénéfice — les moteurs Microsoft couvrent la majorité des cas.' }
          ],
          explication: 'Cloud Sync : agent léger, logique dans le cloud, tolérance de panne native (plusieurs agents), maintenance réduite. Microsoft le positionne comme le choix par défaut pour les nouveaux déploiements simples.'
        },
        { id: 'q4', type: 'single', enonce: 'Le Seamless SSO s\'adresse en priorité à :', reference_cours: 'Section 4 — Seamless SSO',
          choix: [
            { id: 'a', texte: 'Des postes joints Entra hors réseau', correct: false, feedback_si_choisi: 'Les postes joints Entra utilisent leur propre SSO (PRT), pas le SSSO. Et hors réseau, le SSO Kerberos ne fonctionne pas.' },
            { id: 'b', texte: 'Des postes joints AD DS sur le réseau interne', correct: true },
            { id: 'c', texte: 'Des téléphones personnels', correct: false, feedback_si_choisi: 'Le SSSO utilise Kerberos, qui suppose un poste joint au domaine AD et une ligne de vue vers un DC. Pas adapté aux mobiles.' },
            { id: 'd', texte: 'Des comptes invités B2B', correct: false, feedback_si_choisi: 'Les invités B2B viennent d\'un autre tenant et ne sont pas concernés par le SSO intranet de votre AD.' }
          ],
          explication: 'SSSO cible les postes joints AD DS sur le réseau interne. Il réutilise le ticket Kerberos pour éviter la re-saisie de mot de passe côté Entra.'
        },
        { id: 'q5', type: 'single', enonce: 'Vrai/Faux : ADFS est obligatoire pour synchroniser un AD vers Entra.', reference_cours: 'Section 3 — Federation',
          choix: [
            { id: 'a', texte: 'Vrai', correct: false, feedback_si_choisi: 'La synchronisation d\'annuaire (Connect ou Cloud Sync) n\'a rien à voir avec le choix de méthode d\'auth. PHS et PTA fonctionnent sans ADFS.' },
            { id: 'b', texte: 'Faux : PHS ou PTA suffit dans la majorité des cas ; ADFS pour exigences spécifiques', correct: true }
          ],
          explication: 'ADFS n\'est pas obligatoire. PHS ou PTA suffisent dans l\'immense majorité des cas. ADFS n\'est justifié que par des exigences spécifiques : claims complexes, carte à puce avancée, dépendance existante.'
        },
        { id: 'q6', type: 'single', enonce: 'Un objet utilisateur est **synchronisé** depuis l\'AD. Où modifiez-vous son nom d\'affichage ?', reference_cours: 'Section 1 + Piège 3',
          choix: [
            { id: 'a', texte: 'Dans Entra', correct: false, feedback_si_choisi: 'Pour un compte synchronisé, la modification dans Entra sera écrasée au prochain cycle de sync. L\'AD reste la source de vérité.' },
            { id: 'b', texte: 'Dans l\'AD source', correct: true },
            { id: 'c', texte: 'Dans Intune', correct: false, feedback_si_choisi: 'Intune gère les postes et les configurations d\'appareils, pas les attributs d\'annuaire.' },
            { id: 'd', texte: 'Peu importe', correct: false, feedback_si_choisi: 'Ça n\'est pas indifférent : pour un objet synchronisé, seul l\'AD source persiste. Modifier ailleurs = modification écrasée.' }
          ],
          explication: 'Règle de la source de vérité : pour un objet synchronisé, l\'AD DS est maître. La modification cloud est écrasée. Vérifier onPremisesSyncEnabled avant toute action.'
        },
        { id: 'q7', type: 'single', enonce: 'Quel est un prérequis fonctionnel de la détection « identifiants divulgués » d\'Identity Protection en contexte hybride ?', reference_cours: 'Section 3 — PHS',
          choix: [
            { id: 'a', texte: 'ADFS', correct: false, feedback_si_choisi: 'ADFS ne fournit pas le hash au cloud, donc la détection n\'a rien à comparer avec les bases publiques de fuites.' },
            { id: 'b', texte: 'Password Hash Sync', correct: true },
            { id: 'c', texte: 'PTA sans PHS', correct: false, feedback_si_choisi: 'PTA seul ne stocke pas de hash dans le cloud — la détection est partielle voire impossible.' },
            { id: 'd', texte: 'Seamless SSO', correct: false, feedback_si_choisi: 'SSSO est un mécanisme de SSO, sans rapport avec la détection de fuites de mots de passe.' }
          ],
          explication: 'Identity Protection compare les hashs stockés côté Entra avec les bases publiques de credentials fuités. PHS est donc requis pour que la fonctionnalité soit pleinement opérationnelle.'
        },
        { id: 'q8', type: 'single', enonce: 'Quel avantage majeur du Cloud Sync par rapport au Connect Sync ?', reference_cours: 'Section 2',
          choix: [
            { id: 'a', texte: 'Il gère toutes les topologies complexes', correct: false, feedback_si_choisi: 'Faux : Cloud Sync a des limites sur les topologies avancées (writeback complet, filtrage sophistiqué). Connect Sync reste requis dans ces cas.' },
            { id: 'b', texte: 'Plusieurs agents = tolérance de panne native, maintenance allégée', correct: true },
            { id: 'c', texte: 'Il supprime le besoin d\'un AD source', correct: false, feedback_si_choisi: 'Cloud Sync synchronise depuis un AD source — il ne l\'élimine pas. Pour éliminer l\'AD, il faut passer en cloud-only (module 08).' },
            { id: 'd', texte: 'Il fournit la MFA', correct: false, feedback_si_choisi: 'La MFA est fournie par Entra ID (P1/P2), indépendamment du moteur de sync choisi.' }
          ],
          explication: 'Cloud Sync : plusieurs agents actifs simultanément (résilience native, pas de mode staging à basculer manuellement), logique côté Microsoft (maintenance allégée).'
        },
        { id: 'q9', type: 'single', enonce: 'Une organisation n\'a plus aucune dépendance à l\'AD DS (partages migrés, pas d\'app LDAP). Vers quoi doit-elle tendre ?', reference_cours: 'Section 5 — Arbre de décision',
          choix: [
            { id: 'a', texte: 'Rester hybride indéfiniment', correct: false, feedback_si_choisi: 'L\'hybride est un état de transition, pas une cible. Sans dépendance, il ajoute inutilement une surface d\'administration.' },
            { id: 'b', texte: 'Cloud-only', correct: true },
            { id: 'c', texte: 'Déployer ADFS', correct: false, feedback_si_choisi: 'ADFS ajoute de la complexité sans bénéfice quand on peut aller en cloud-only.' },
            { id: 'd', texte: 'Ajouter un second AD', correct: false, feedback_si_choisi: 'Doubler l\'AD ne fait qu\'aggraver la dette : la cible est de le décommissionner.' }
          ],
          explication: 'Cloud-only : moins de surface d\'administration, alignement Zero Trust, plus de dépendance à l\'infrastructure on-prem. Voir module 08 pour le plan de décommission de l\'AD.'
        },
        { id: 'q10', type: 'single', enonce: 'PTA implique quelle dépendance de disponibilité ?', reference_cours: 'Section 3 — PTA',
          choix: [
            { id: 'a', texte: 'Aucune', correct: false, feedback_si_choisi: 'PTA repose sur des agents on-prem — leur indisponibilité coupe l\'authentification.' },
            { id: 'b', texte: 'Les agents PTA (et donc l\'on-prem) doivent être disponibles pour authentifier', correct: true },
            { id: 'c', texte: 'Un serveur ADFS', correct: false, feedback_si_choisi: 'ADFS est une méthode d\'auth distincte (Federation). PTA n\'en a pas besoin.' },
            { id: 'd', texte: 'Une licence E5', correct: false, feedback_si_choisi: 'PTA est inclus dans Entra ID Free/P1/P2 — pas de licence spécifique requise.' }
          ],
          explication: 'PTA valide en temps réel via les agents PTA connectés à l\'AD on-prem : si l\'on-prem est indisponible, l\'auth échoue. C\'est la contrepartie du fait de ne pas stocker le hash dans le cloud.'
        }
      ]
    };
  </script>
  <script src="assets/shared.js"></script>

  <script src="scorm2004-api.js"></script>
  <script src="scorm-bridge.js"></script>
</body>
</html>
