{"id":1265,"date":"2026-10-28T15:12:07","date_gmt":"2026-10-28T14:12:07","guid":{"rendered":"https:\/\/remivernier.com\/?p=1265"},"modified":"2026-10-28T18:49:49","modified_gmt":"2026-10-28T17:49:49","slug":"anatomie-primary-refresh-token-entra-id","status":"publish","type":"post","link":"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/anatomie-primary-refresh-token-entra-id\/","title":{"rendered":"Anatomie du Primary Refresh Token Entra ID"},"content":{"rendered":"<p>Quand nous ouvrons une session sur un poste joint \u00e0 Entra ID, nous arrivons sur Teams, Outlook et le portail web sans jamais ressaisir nos identifiants. Ce SSO tient \u00e0 un artefact unique, le <em>Primary Refresh Token<\/em> (PRT). C&rsquo;est l&rsquo;\u00e9quivalent, c\u00f4t\u00e9 Entra, du TGT que nous avions lu dans l&rsquo;article sur <a href=\"https:\/\/remivernier.com\/index.php\/2026\/10\/27\/kerberos-lire-ticket-service-klist-wireshark-tgs-req-pac\/\">Kerberos<\/a>: un jeton de longue dur\u00e9e qui en d\u00e9bloque d&rsquo;autres.<\/p>\n<p>Regarder sa structure, o\u00f9 vivent ses cl\u00e9s et comment il signe ses requ\u00eates, c&rsquo;est comprendre d&rsquo;un m\u00eame mouvement pourquoi il est si pratique et o\u00f9 se situe le risque. Les m\u00e9canismes d\u00e9crits ici sont ceux que Microsoft documente pour Windows; les captures de poste r\u00e9el ne sont pas n\u00e9cessaires, <code>dsregcmd<\/code> et la documentation suffisent.<\/p>\n<h2>Le PRT, un TGT pour le cloud<\/h2>\n<p>Le PRT est d\u00e9livr\u00e9 aux \u00ab brokers \u00bb de jetons de Microsoft (CloudAP et WAM sur Windows) pour assurer le SSO. Du point de vue du poste, c&rsquo;est un blob chiffr\u00e9 que le client ne sait pas lire: seul Entra ID en conna\u00eet le contenu. Il est \u00e9mis pendant l&rsquo;ouverture de session Windows sur un appareil joint ou joint hybride, par le plugin CloudAP, puis le plugin WAM s&rsquo;en sert pour obtenir des jetons d&rsquo;acc\u00e8s et de rafra\u00eechissement pour chaque application.<\/p>\n<p>Sa dur\u00e9e de vie est de 90 jours, renouvel\u00e9 toutes les 4 heures tant que l&rsquo;appareil sert. Surtout, il transporte des revendications d&rsquo;appareil et d&rsquo;utilisateur, dont la revendication MFA, qu&rsquo;Entra ID \u00e9value ensuite pour l&rsquo;acc\u00e8s conditionnel. Un d\u00e9tail lourd de cons\u00e9quences: l&rsquo;acc\u00e8s conditionnel n&rsquo;est <em>pas<\/em> \u00e9valu\u00e9 au moment o\u00f9 le PRT est \u00e9mis ou renouvel\u00e9, seulement quand on s&rsquo;en sert pour demander un jeton d&rsquo;application.<\/p>\n<h2>Deux paires de cl\u00e9s et le TPM<\/h2>\n<p>Tout repose sur l&rsquo;enregistrement de l&rsquo;appareil, qui g\u00e9n\u00e8re deux paires de cl\u00e9s: la cl\u00e9 d&rsquo;appareil (dkpub\/dkpriv) et la cl\u00e9 de transport (tkpub\/tkpriv). Les parties priv\u00e9es sont scell\u00e9es dans le TPM quand il y en a un.<\/p>\n<p>En m\u00eame temps que le PRT, Entra ID \u00e9met une <strong>cl\u00e9 de session<\/strong> sym\u00e9trique, chiffr\u00e9e avec la cl\u00e9 de transport publique (tkpub). Le poste ne peut la d\u00e9chiffrer qu&rsquo;avec tkpriv, \u00e0 l&rsquo;int\u00e9rieur du TPM, qui la re-chiffre aussit\u00f4t avec sa propre cl\u00e9 avant que CloudAP ne la range dans son cache. Cette cl\u00e9 de session est la cl\u00e9 de preuve de possession de toutes les requ\u00eates li\u00e9es au PRT, et elle est aussi incluse dans le PRT lui-m\u00eame. La documentation est explicite: <em>\u00ab no other OS component can access it \u00bb<\/em>. Sur un poste avec TPM, la cl\u00e9 de session ne se prom\u00e8ne donc jamais en clair hors du module.<\/p>\n<p>Comment cette cl\u00e9 arrive-t-elle sur le poste? La c\u00e9r\u00e9monie d&rsquo;\u00e9mission, que Microsoft documente \u00e9tape par \u00e9tape, tient en cinq temps. \u00c0 l&rsquo;ouverture de session, CloudAP d\u00e9couvre le fournisseur d&rsquo;identit\u00e9 de l&rsquo;utilisateur, obtient un nonce d&rsquo;Entra, puis construit une requ\u00eate d&rsquo;authentification \u2014 identifiants et nonce \u2014 qu&rsquo;il signe avec la cl\u00e9 d&rsquo;appareil (dkpriv). Entra valide le tout, puis renvoie le PRT chiffr\u00e9 accompagn\u00e9 de la cl\u00e9 de session, elle-m\u00eame chiffr\u00e9e avec la cl\u00e9 de transport publique (tkpub). Le poste ne peut rien en faire sans le TPM, qui seul d\u00e9tient tkpriv.<\/p>\n<figure class=\"wp-block-image\">\n<svg viewBox=\"0 0 720 470\" width=\"100%\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" font-family=\"sans-serif\" font-size=\"12.5\">\n<text x=\"130\" y=\"20\" text-anchor=\"middle\" font-weight=\"bold\">Poste Windows \u2014 CloudAP<\/text>\n<text x=\"600\" y=\"20\" text-anchor=\"middle\" font-weight=\"bold\">Entra ID<\/text>\n<line x1=\"130\" y1=\"30\" x2=\"130\" y2=\"440\" stroke=\"#bbb\" stroke-dasharray=\"4 4\"\/>\n<line x1=\"600\" y1=\"30\" x2=\"600\" y2=\"440\" stroke=\"#bbb\" stroke-dasharray=\"4 4\"\/>\n<rect x=\"15\" y=\"44\" width=\"230\" height=\"46\" fill=\"#e8f0fe\" stroke=\"#333\"\/>\n<text x=\"130\" y=\"63\" text-anchor=\"middle\">1. Identifiants saisis, CloudAP<\/text>\n<text x=\"130\" y=\"80\" text-anchor=\"middle\" font-size=\"11\">d\u00e9couvre le fournisseur (realm)<\/text>\n<line x1=\"245\" y1=\"112\" x2=\"598\" y2=\"112\" stroke=\"#333\" marker-end=\"url(#p)\"\/>\n<text x=\"420\" y=\"106\" text-anchor=\"middle\" font-size=\"11\">2. demande de nonce<\/text>\n<line x1=\"600\" y1=\"130\" x2=\"247\" y2=\"130\" stroke=\"#333\" marker-end=\"url(#p)\"\/>\n<text x=\"420\" y=\"124\" text-anchor=\"middle\" font-size=\"11\">nonce<\/text>\n<rect x=\"15\" y=\"150\" width=\"230\" height=\"60\" fill=\"#e8f0fe\" stroke=\"#333\"\/>\n<text x=\"130\" y=\"174\" text-anchor=\"middle\">3. requ\u00eate sign\u00e9e avec<\/text>\n<text x=\"130\" y=\"191\" text-anchor=\"middle\">la cl\u00e9 d&rsquo;appareil (dkpriv)<\/text>\n<text x=\"130\" y=\"206\" text-anchor=\"middle\" font-size=\"11\">identifiants + nonce<\/text>\n<line x1=\"245\" y1=\"180\" x2=\"598\" y2=\"180\" stroke=\"#333\" marker-end=\"url(#p)\"\/>\n<rect x=\"470\" y=\"226\" width=\"240\" height=\"78\" fill=\"#e6f4ea\" stroke=\"#333\"\/>\n<text x=\"590\" y=\"248\" text-anchor=\"middle\">4. Entra valide identifiants,<\/text>\n<text x=\"590\" y=\"265\" text-anchor=\"middle\">nonce et signature d&rsquo;appareil<\/text>\n<text x=\"590\" y=\"285\" text-anchor=\"middle\" font-size=\"11\">\u00e9met le PRT chiffr\u00e9 + la cl\u00e9 de session<\/text>\n<text x=\"590\" y=\"300\" text-anchor=\"middle\" font-size=\"11\">(chiffr\u00e9e avec tkpub, incluse dans le PRT)<\/text>\n<line x1=\"600\" y1=\"320\" x2=\"247\" y2=\"320\" stroke=\"#333\" marker-end=\"url(#p)\"\/>\n<text x=\"420\" y=\"314\" text-anchor=\"middle\" font-size=\"11\">PRT + cl\u00e9 de session<\/text>\n<rect x=\"15\" y=\"338\" width=\"230\" height=\"92\" fill=\"#fef7e0\" stroke=\"#333\"\/>\n<text x=\"130\" y=\"360\" text-anchor=\"middle\" font-weight=\"bold\">TPM<\/text>\n<text x=\"130\" y=\"379\" text-anchor=\"middle\">5. d\u00e9chiffre la cl\u00e9 (tkpriv),<\/text>\n<text x=\"130\" y=\"396\" text-anchor=\"middle\">la re-chiffre avec sa cl\u00e9<\/text>\n<text x=\"130\" y=\"415\" text-anchor=\"middle\" font-size=\"11\">CloudAP met PRT + cl\u00e9 en cache<\/text>\n<defs><marker id=\"p\" markerWidth=\"8\" markerHeight=\"8\" refX=\"7\" refY=\"4\" orient=\"auto\"><path d=\"M0,0 L8,4 L0,8 z\" fill=\"#333\"\/><\/marker><\/defs>\n<\/svg><br \/>\n<\/figure>\n<p style=\"text-align:center\"><em>\u00c9mission du PRT \u00e0 l&rsquo;ouverture de session: la cl\u00e9 de session n&rsquo;existe en clair que le temps d&rsquo;un passage dans le TPM.<\/em><\/p>\n<p>Ce PRT vaut 90 jours et CloudAP le renouvelle toutes les 4 heures tant que le poste sert; chaque renouvellement est sign\u00e9 par la cl\u00e9 de session, pas par les identifiants, si bien qu&rsquo;un poste actif ne redemande jamais le mot de passe. Il existe deux variantes: le PRT d&rsquo;<em>appareil enregistr\u00e9<\/em>, li\u00e9 \u00e0 une identit\u00e9 d&rsquo;appareil dans Entra et seul \u00e0 satisfaire les politiques d&rsquo;appareil de l&rsquo;acc\u00e8s conditionnel, et le PRT d&rsquo;<em>appareil non enregistr\u00e9<\/em>, rattach\u00e9 \u00e0 une simple paire de cl\u00e9s locale \u2014 par exemple un navigateur sur un poste personnel. C&rsquo;est le premier qui nous int\u00e9resse ici: c&rsquo;est lui qui porte la confiance de l&rsquo;appareil, et donc la valeur qu&rsquo;un attaquant convoite.<\/p>\n<h3>Lire l&rsquo;\u00e9tat du PRT avec dsregcmd<\/h3>\n<p>La commande <code>dsregcmd \/status<\/code>, lanc\u00e9e dans le contexte de l&rsquo;utilisateur, donne l&rsquo;essentiel sans rien d\u00e9coder. Le bloc \u00ab SSO State \u00bb indique la pr\u00e9sence du PRT, le bloc \u00ab Device Details \u00bb indique si les cl\u00e9s sont dans le TPM:<\/p>\n<pre class=\"wp-block-code\"><code>+----------------------------------------------------------+\n| Device Details                                           |\n+----------------------------------------------------------+\n               KeyProvider : Microsoft Platform Crypto Provider\n              TpmProtected : YES\n          DeviceAuthStatus : SUCCESS\n\n+----------------------------------------------------------+\n| SSO State                                                |\n+----------------------------------------------------------+\n                AzureAdPrt : YES\n      AzureAdPrtUpdateTime : 2026-10-28 06:12:44.000 UTC\n      AzureAdPrtExpiryTime : 2027-01-26 06:12:44.000 UTC\n       AzureAdPrtAuthority : https:\/\/login.microsoftonline.com\/&lt;tenant&gt;<\/code><\/pre>\n<p><code>AzureAdPrt: YES<\/code> confirme qu&rsquo;un PRT est pr\u00e9sent pour l&rsquo;utilisateur connect\u00e9. Les deux lignes \u00e0 surveiller sont <code>TpmProtected<\/code> et <code>KeyProvider<\/code>: <em>Microsoft Platform Crypto Provider<\/em> avec <code>TpmProtected: YES<\/code> veut dire que les cl\u00e9s sont dans le mat\u00e9riel; <em>Microsoft Software Key Storage Provider<\/em> avec <code>TpmProtected: NO<\/code> veut dire qu&rsquo;elles sont en logiciel, et nous verrons que l&rsquo;\u00e9cart de robustesse est \u00e9norme.<\/p>\n<h2>Le cookie x-ms-RefreshTokenCredential et le SSO web<\/h2>\n<p>Le plus instructif est le SSO vers un site web, car c&rsquo;est l\u00e0 qu&rsquo;un objet sign\u00e9 circule. Quand le navigateur ouvre une page de connexion Entra, une extension (native dans Edge, via l&rsquo;extension \u00ab Microsoft Single Sign On \u00bb dans Chrome) reconna\u00eet l&rsquo;URL et appelle un h\u00f4te natif local, <code>BrowserCore.exe<\/code>. Celui-ci demande \u00e0 CloudAP un cookie de PRT, que CloudAP fabrique et <strong>signe avec la cl\u00e9 de session scell\u00e9e par le TPM<\/strong>. Le cookie repart dans l&rsquo;en-t\u00eate <code>x-ms-RefreshTokenCredential<\/code> vers <code>login.microsoftonline.com<\/code>.<\/p>\n<figure class=\"wp-block-image\">\n<svg viewBox=\"0 0 720 300\" width=\"100%\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" font-family=\"sans-serif\" font-size=\"12.5\">\n<rect x=\"12\" y=\"28\" width=\"210\" height=\"62\" fill=\"#e8f0fe\" stroke=\"#333\"\/>\n<text x=\"117\" y=\"52\" text-anchor=\"middle\">Ouverture de session Windows<\/text>\n<text x=\"117\" y=\"72\" text-anchor=\"middle\" font-size=\"11\">identifiants &#8594; CloudAP<\/text>\n<rect x=\"255\" y=\"28\" width=\"210\" height=\"62\" fill=\"#e8f0fe\" stroke=\"#333\"\/>\n<text x=\"360\" y=\"48\" text-anchor=\"middle\">CloudAP : PRT<\/text>\n<text x=\"360\" y=\"66\" text-anchor=\"middle\">+ cl\u00e9 de session<\/text>\n<text x=\"360\" y=\"82\" text-anchor=\"middle\" font-size=\"11\">scell\u00e9e par le TPM<\/text>\n<rect x=\"498\" y=\"28\" width=\"210\" height=\"62\" fill=\"#fef7e0\" stroke=\"#333\"\/>\n<text x=\"603\" y=\"52\" text-anchor=\"middle\">TPM<\/text>\n<text x=\"603\" y=\"72\" text-anchor=\"middle\" font-size=\"11\">cl\u00e9 de session jamais en clair<\/text>\n<line x1=\"222\" y1=\"59\" x2=\"253\" y2=\"59\" stroke=\"#333\" marker-end=\"url(#a)\"\/>\n<line x1=\"465\" y1=\"59\" x2=\"496\" y2=\"59\" stroke=\"#333\" marker-end=\"url(#a)\"\/>\n<line x1=\"360\" y1=\"90\" x2=\"360\" y2=\"120\" stroke=\"#333\" marker-end=\"url(#a)\"\/>\n<rect x=\"255\" y=\"122\" width=\"210\" height=\"62\" fill=\"#e8f0fe\" stroke=\"#333\"\/>\n<text x=\"360\" y=\"146\" text-anchor=\"middle\">BrowserCore.exe<\/text>\n<text x=\"360\" y=\"166\" text-anchor=\"middle\" font-size=\"11\">fabrique le cookie, sign\u00e9<\/text>\n<rect x=\"12\" y=\"210\" width=\"210\" height=\"62\" fill=\"#e8f0fe\" stroke=\"#333\"\/>\n<text x=\"117\" y=\"234\" text-anchor=\"middle\">Navigateur<\/text>\n<text x=\"117\" y=\"254\" text-anchor=\"middle\" font-size=\"11\">nonce de la page<\/text>\n<rect x=\"255\" y=\"210\" width=\"210\" height=\"62\" fill=\"#e6f4ea\" stroke=\"#333\"\/>\n<text x=\"360\" y=\"230\" text-anchor=\"middle\">x-ms-RefreshToken-<\/text>\n<text x=\"360\" y=\"246\" text-anchor=\"middle\">Credential<\/text>\n<text x=\"360\" y=\"263\" text-anchor=\"middle\" font-size=\"11\">&#8594; login.microsoftonline.com<\/text>\n<rect x=\"498\" y=\"210\" width=\"210\" height=\"62\" fill=\"#e6f4ea\" stroke=\"#333\"\/>\n<text x=\"603\" y=\"234\" text-anchor=\"middle\">Entra ID valide<\/text>\n<text x=\"603\" y=\"254\" text-anchor=\"middle\" font-size=\"11\">signature + nonce + appareil<\/text>\n<line x1=\"255\" y1=\"153\" x2=\"150\" y2=\"153\" stroke=\"#333\"\/>\n<line x1=\"150\" y1=\"153\" x2=\"150\" y2=\"208\" stroke=\"#333\" marker-end=\"url(#a)\"\/>\n<text x=\"165\" y=\"150\" font-size=\"11\">cookie<\/text>\n<line x1=\"222\" y1=\"241\" x2=\"253\" y2=\"241\" stroke=\"#333\" marker-end=\"url(#a)\"\/>\n<line x1=\"465\" y1=\"241\" x2=\"496\" y2=\"241\" stroke=\"#333\" marker-end=\"url(#a)\"\/>\n<text x=\"603\" y=\"285\" text-anchor=\"middle\" font-size=\"11\">jetons + cookie li\u00e9 \u00e0 l&rsquo;appareil<\/text>\n<defs><marker id=\"a\" markerWidth=\"8\" markerHeight=\"8\" refX=\"7\" refY=\"4\" orient=\"auto\"><path d=\"M0,0 L8,4 L0,8 z\" fill=\"#333\"\/><\/marker><\/defs>\n<\/svg><br \/>\n<\/figure>\n<p style=\"text-align:center\"><em>SSO web par PRT: le cookie est sign\u00e9 dans le TPM, jamais le secret lui-m\u00eame.<\/em><\/p>\n<p>Entra ID v\u00e9rifie la signature de la cl\u00e9 de session, le nonce (qui lie le cookie \u00e0 une ouverture de session pr\u00e9cise) et la validit\u00e9 de l&rsquo;appareil, puis renvoie un jeton d&rsquo;identit\u00e9 et un cookie de session. Ce cookie de session est lui aussi li\u00e9 \u00e0 la cl\u00e9 de session ou d&rsquo;appareil: rejou\u00e9 depuis une autre machine, il est refus\u00e9. Nous retrouvons l&rsquo;id\u00e9e vue avec les <a href=\"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/passkeys-fido2-entra-id-ceremonie-webauthn\/\">passkeys<\/a>: ce qui prot\u00e8ge, c&rsquo;est la liaison cryptographique, pas le secret partag\u00e9.<\/p>\n<h2>Qui g\u00e8re le PRT: CloudAP, WAM et les brokers<\/h2>\n<p>Le PRT n&rsquo;est jamais manipul\u00e9 par les applications elles-m\u00eames. Entre elles et Entra ID s&rsquo;intercalent des composants Microsoft sp\u00e9cialis\u00e9s, et savoir qui fait quoi \u00e9claire autant le fonctionnement que la surface d&rsquo;attaque.<\/p>\n<p><strong>Sur Windows.<\/strong> Tout part de <strong>CloudAP<\/strong> (Cloud Authentication Provider), le fournisseur d&rsquo;authentification moderne charg\u00e9 dans le processus LSASS \u00e0 l&rsquo;ouverture de session. Le <em>plugin CloudAP Microsoft Entra<\/em> est l&rsquo;autorit\u00e9 du PRT sur un poste joint ou joint hybride: c&rsquo;est lui qui le demande, le met en cache et le renouvelle. Quand une application veut un jeton, elle ne parle pas \u00e0 Entra directement mais \u00e0 <strong>WAM<\/strong> (Web Account Manager), le courtier de jetons de Windows; le <em>plugin WAM Microsoft Entra<\/em> se sert alors du PRT pour obtenir jetons d&rsquo;acc\u00e8s et de rafra\u00eechissement, et c&rsquo;est lui aussi qui injecte le PRT dans les requ\u00eates du navigateur. Un troisi\u00e8me composant, <strong>Dsreg<\/strong>, g\u00e8re l&rsquo;enregistrement de l&rsquo;appareil et les cl\u00e9s d\u00e9crites plus haut.<\/p>\n<p><strong>Le cas du navigateur.<\/strong> Edge sait parler nativement \u00e0 ces courtiers. Chrome, lui, a besoin de l&rsquo;extension <strong>\u00ab Microsoft Single Sign On \u00bb<\/strong> \u2014 l&rsquo;ancienne \u00ab Windows 10 Accounts \u00bb, d&rsquo;o\u00f9 le nom de broker \u00ab W10 account \u00bb qu&rsquo;on croise encore (identifiant <code>ppnbnpeolgkicgegkbkbjmhlideopiji<\/code>). Cette extension appelle, par le <em>native messaging<\/em> de Chrome, l&rsquo;h\u00f4te natif <code>BrowserCore.exe<\/code> qui, lui, a le droit de demander un cookie de PRT \u00e0 CloudAP. Firefox depuis la version 91 fait de m\u00eame via un r\u00e9glage \u00ab Windows SSO \u00bb. Sous le capot, c&rsquo;est l&rsquo;API Windows <code>IProofOfPossessionCookieInfoManager<\/code> qui produit l&rsquo;en-t\u00eate sign\u00e9.<\/p>\n<p><strong>Hors de Windows.<\/strong> Le m\u00eame r\u00f4le de courtier est tenu par une application selon la plateforme: <strong>Microsoft Authenticator<\/strong> sur iOS, <strong>Intune Company Portal<\/strong> accompagn\u00e9 du <em>plugin SSO entreprise<\/em> (ou le Platform SSO) sur macOS, et Authenticator, Company Portal ou Link to Windows sur Android. Sur Mac, le courtier n&rsquo;est actif que si l&rsquo;appareil est g\u00e9r\u00e9 par MDM et que le profil d&rsquo;extension SSO est d\u00e9ploy\u00e9. Partout l&rsquo;id\u00e9e est la m\u00eame: une brique Microsoft de confiance d\u00e9tient le PRT et le transforme en jetons pour les applications, sans jamais exposer les cl\u00e9s.<\/p>\n<h2>O\u00f9 se situe le risque: pass-the-PRT<\/h2>\n<p>Le point faible n&rsquo;est pas la cryptographie, c&rsquo;est l&rsquo;architecture: un broker tourne sur le poste et transforme le PRT en jetons pour qui le lui demande dans le bon contexte. Quiconque ex\u00e9cute du code <em>sous l&rsquo;identit\u00e9 de l&rsquo;utilisateur<\/em> peut donc solliciter ce m\u00eame broker. Dirk-jan Mollema l&rsquo;a montr\u00e9 d\u00e8s 2020 dans son <a href=\"https:\/\/dirkjanm.io\/abusing-azure-ad-sso-with-the-primary-refresh-token\/\">analyse de r\u00e9f\u00e9rence<\/a>: demander un cookie de PRT via <code>BrowserCore.exe<\/code> ne r\u00e9clame pas de droits d&rsquo;administrateur, seulement l&rsquo;ex\u00e9cution de code dans la session. C&rsquo;est du post-exploitation, pas de l&rsquo;acc\u00e8s initial: l&rsquo;attaquant est d\u00e9j\u00e0 sur le poste.<\/p>\n<p>Ce qu&rsquo;il obtient est un cookie <code>x-ms-RefreshTokenCredential<\/code>, donc des jetons qui portent d\u00e9j\u00e0 les revendications MFA et appareil, et satisfont un acc\u00e8s conditionnel exigeant le MFA ou un appareil conforme. Des outils publics automatisent cette demande de cookie \u2014 ROADtoken, RequestAADRefreshToken de Lee Christensen, ou <code>roadtx<\/code> de la suite ROADtools \u2014 en interrogeant le m\u00eame h\u00f4te natif que le navigateur. Je les cite pour que vous sachiez ce que vous verrez dans un rapport d&rsquo;incident; je ne d\u00e9taille pas leur mise en \u0153uvre.<\/p>\n<p>Reste la voie plus brutale: extraire le PRT et la cl\u00e9 de session eux-m\u00eames. C&rsquo;est l\u00e0 que le TPM change tout. Sur un poste <code>TpmProtected: YES<\/code>, la cl\u00e9 de session est scell\u00e9e: un attaquant m\u00eame administrateur peut tout au plus l&rsquo;utiliser sur la machine, pas la copier ailleurs. Sur un poste sans TPM (<em>Software Key Storage Provider<\/em>), les cl\u00e9s sont r\u00e9cup\u00e9rables avec des droits \u00e9lev\u00e9s, et des outils comme Mimikatz savent le faire. La ligne <code>TpmProtected<\/code> de <code>dsregcmd<\/code> n&rsquo;est donc pas cosm\u00e9tique: elle s\u00e9pare \u00ab il faut rester sur le poste \u00bb de \u00ab on emporte le jeton \u00bb.<\/p>\n<p>L&rsquo;impact est le m\u00eame que pour un relais <a href=\"https:\/\/remivernier.com\/index.php\/2018\/08\/26\/protocoles-nbt-ns-llmnr-et-exploitation-des-failles\/\">NTLM<\/a>: la force de la preuve initiale ne compte plus si le jeton qu&rsquo;elle produit peut \u00eatre r\u00e9utilis\u00e9. Pire, d\u00e9sactiver l&rsquo;appareil dans Entra ID n&rsquo;invalide pas les jetons de rafra\u00eechissement d\u00e9j\u00e0 \u00e9mis \u00e0 partir du PRT; il faut une r\u00e9vocation explicite.<\/p>\n<p>Pour mesurer le rayon d&rsquo;impact, il faut voir le PRT comme une cl\u00e9 ma\u00eetresse temporaire. Un mot de passe vol\u00e9 ouvre une porte mais bute encore sur le MFA; un PRT compromis livre une session qui a d\u00e9j\u00e0 franchi le MFA et porte la confiance de l&rsquo;appareil. L&rsquo;attaquant h\u00e9rite de la posture de s\u00e9curit\u00e9 du poste l\u00e9gitime: il ne contourne pas les contr\u00f4les, il passe au travers parce qu&rsquo;ils ont d\u00e9j\u00e0 \u00e9t\u00e9 satisfaits. MITRE ATT&amp;CK range cette r\u00e9utilisation sous la technique T1550.001 (<em>Use Alternate Authentication Material: Application Access Token<\/em>), parmi les mouvements qui \u00e9chappent aux d\u00e9fenses d&rsquo;authentification classiques. Ce n&rsquo;est pas th\u00e9orique: les campagnes adversary-in-the-middle de ces derni\u00e8res ann\u00e9es combinent un proxy de phishing pour la premi\u00e8re session et le vol de jetons pour la persistance, ce qui a fait de ces jetons une cible de premier plan.<\/p>\n<h2>Le sc\u00e9nario de compromission, de bout en bout<\/h2>\n<p>Pour saisir le risque, suivons un vol de PRT comme une cha\u00eene, de l&rsquo;entr\u00e9e \u00e0 la persistance. Le PRT n&rsquo;est jamais une voie d&rsquo;acc\u00e8s initial: il suppose que l&rsquo;attaquant ex\u00e9cute d\u00e9j\u00e0 du code sur le poste. C&rsquo;est une arme de post-exploitation, et c&rsquo;est pr\u00e9cis\u00e9ment ce qui la rend redoutable, car elle h\u00e9rite de tout ce que le poste a de l\u00e9gitime.<\/p>\n<figure class=\"wp-block-image\">\n<svg viewBox=\"0 0 720 404\" width=\"100%\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" font-family=\"sans-serif\" font-size=\"13\">\n<rect x=\"20\" y=\"12\" width=\"680\" height=\"58\" rx=\"6\" fill=\"#e8f0fe\" stroke=\"#333\"\/>\n<text x=\"36\" y=\"36\" font-weight=\"bold\">1. Pied dans la place<\/text>\n<text x=\"36\" y=\"56\" font-size=\"11.5\">ex\u00e9cution de code sous l&rsquo;identit\u00e9 de l&rsquo;utilisateur (phishing, malware, AiTM)<\/text>\n<rect x=\"20\" y=\"90\" width=\"680\" height=\"58\" rx=\"6\" fill=\"#e8f0fe\" stroke=\"#333\"\/>\n<text x=\"36\" y=\"114\" font-weight=\"bold\">2. Solliciter le broker<\/text>\n<text x=\"36\" y=\"134\" font-size=\"11.5\">cookie de PRT demand\u00e9 en contexte utilisateur, sans droits d&rsquo;administrateur<\/text>\n<rect x=\"20\" y=\"168\" width=\"680\" height=\"58\" rx=\"6\" fill=\"#fef7e0\" stroke=\"#333\"\/>\n<text x=\"36\" y=\"192\" font-weight=\"bold\">3. Sortir de la bo\u00eete<\/text>\n<text x=\"36\" y=\"212\" font-size=\"11.5\">jetons utilis\u00e9s depuis l&rsquo;infrastructure de l&rsquo;attaquant, hors du poste<\/text>\n<rect x=\"20\" y=\"246\" width=\"680\" height=\"58\" rx=\"6\" fill=\"#fde8e8\" stroke=\"#333\"\/>\n<text x=\"36\" y=\"270\" font-weight=\"bold\">4. Impact<\/text>\n<text x=\"36\" y=\"290\" font-size=\"11.5\">MFA et revendication d&rsquo;appareil d\u00e9j\u00e0 satisfaits : franchit l&rsquo;acc\u00e8s conditionnel<\/text>\n<rect x=\"20\" y=\"324\" width=\"680\" height=\"58\" rx=\"6\" fill=\"#fde8e8\" stroke=\"#333\"\/>\n<text x=\"36\" y=\"348\" font-weight=\"bold\">5. Persistance<\/text>\n<text x=\"36\" y=\"368\" font-size=\"11.5\">les jetons de rafra\u00eechissement survivent \u00e0 la d\u00e9sactivation de l&rsquo;appareil<\/text>\n<line x1=\"360\" y1=\"70\" x2=\"360\" y2=\"90\" stroke=\"#333\" marker-end=\"url(#k)\"\/>\n<line x1=\"360\" y1=\"148\" x2=\"360\" y2=\"168\" stroke=\"#333\" marker-end=\"url(#k)\"\/>\n<line x1=\"360\" y1=\"226\" x2=\"360\" y2=\"246\" stroke=\"#333\" marker-end=\"url(#k)\"\/>\n<line x1=\"360\" y1=\"304\" x2=\"360\" y2=\"324\" stroke=\"#333\" marker-end=\"url(#k)\"\/>\n<defs><marker id=\"k\" markerWidth=\"9\" markerHeight=\"9\" refX=\"8\" refY=\"4.5\" orient=\"auto\"><path d=\"M0,0 L9,4.5 L0,9 z\" fill=\"#333\"\/><\/marker><\/defs>\n<\/svg><br \/>\n<\/figure>\n<p style=\"text-align:center\"><em>La cha\u00eene d&rsquo;un vol de PRT : post-exploitation, pas acc\u00e8s initial. Chaque \u00e9tape h\u00e9rite de la l\u00e9gitimit\u00e9 du poste.<\/em><\/p>\n<p><strong>Le pied dans la place.<\/strong> L&rsquo;attaquant obtient d&rsquo;abord l&rsquo;ex\u00e9cution de code sous l&rsquo;identit\u00e9 de l&rsquo;utilisateur: pi\u00e8ce jointe pi\u00e9g\u00e9e, logiciel malveillant, ou proxy adversary-in-the-middle qui capte une premi\u00e8re session. \u00c0 ce stade il est sur un poste, dans une session ouverte, rien de plus.<\/p>\n<p><strong>Solliciter le broker.<\/strong> C&rsquo;est l&rsquo;\u00e9tape qui distingue le PRT d&rsquo;un simple vol de mot de passe. Plut\u00f4t que de chercher un secret, l&rsquo;attaquant demande au broker local ce que celui-ci sait faire: produire un cookie de PRT pour une page de connexion. En contexte utilisateur, via l&rsquo;h\u00f4te natif d\u00e9crit plus haut, cela ne r\u00e9clame pas de droits d&rsquo;administrateur. Avec une \u00e9l\u00e9vation, il peut viser plus bas, les cl\u00e9s elles-m\u00eames, et c&rsquo;est l\u00e0 que le TPM l&rsquo;arr\u00eate.<\/p>\n<p><strong>Sortir de la bo\u00eete.<\/strong> Le cookie, ou les jetons qu&rsquo;il permet d&rsquo;obtenir, servent ensuite \u00e0 s&rsquo;authentifier comme l&rsquo;utilisateur vers Microsoft 365 ou Azure, depuis l&rsquo;infrastructure de l&rsquo;attaquant.<\/p>\n<p><strong>Ce que \u00e7a rapporte.<\/strong> C&rsquo;est le n\u0153ud du probl\u00e8me: ces jetons portent d\u00e9j\u00e0 les revendications MFA et appareil du poste l\u00e9gitime. Ils franchissent donc un acc\u00e8s conditionnel qui exige le MFA ou un appareil conforme, sans que l&rsquo;attaquant n&rsquo;ait jamais vu de second facteur. Il n&rsquo;a pas contourn\u00e9 le MFA, il a h\u00e9rit\u00e9 d&rsquo;une session qui l&rsquo;avait d\u00e9j\u00e0 pass\u00e9. Un mot de passe vol\u00e9 ouvre une porte; un PRT vol\u00e9 livre la session enti\u00e8re, MFA compris.<\/p>\n<p><strong>La persistance.<\/strong> Les jetons de rafra\u00eechissement d\u00e9riv\u00e9s du PRT vivent longtemps, et d\u00e9sactiver l&rsquo;appareil dans Entra ID n&rsquo;invalide pas ceux d\u00e9j\u00e0 \u00e9mis. Sans r\u00e9vocation explicite, l&rsquo;acc\u00e8s survit au nettoyage du poste. C&rsquo;est pourquoi la r\u00e9ponse \u00e0 incident ne peut pas se limiter \u00e0 r\u00e9installer la machine, et c&rsquo;est l&rsquo;objet de la derni\u00e8re section.<\/p>\n<h2>L&rsquo;acc\u00e8s conditionnel, l\u00e0 o\u00f9 les revendications comptent<\/h2>\n<p>Si le PRT a autant de valeur, c&rsquo;est \u00e0 cause de ce qu&rsquo;il transporte pour l&rsquo;acc\u00e8s conditionnel. Un PRT porte des revendications d&rsquo;appareil (l&rsquo;appareil est-il enregistr\u00e9, conforme, joint hybride?) et, selon la fa\u00e7on dont l&rsquo;utilisateur s&rsquo;est authentifi\u00e9, une revendication MFA. Quand le plugin WAM \u00e9change le PRT contre un jeton d&rsquo;application, ces revendications passent dans le jeton, et c&rsquo;est \u00e0 ce moment \u2014 pas \u00e0 l&rsquo;\u00e9mission du PRT \u2014 qu&rsquo;Entra ID \u00e9value les politiques d&rsquo;acc\u00e8s conditionnel.<\/p>\n<p>Ce d\u00e9tail de calendrier a deux cons\u00e9quences. D&rsquo;abord, activer une politique apr\u00e8s coup ne rejoue pas les PRT d\u00e9j\u00e0 \u00e9mis: l&rsquo;\u00e9valuation se fait au prochain \u00e9change de jeton. Ensuite, et c&rsquo;est le c\u0153ur du risque, un attaquant qui r\u00e9utilise un PRT h\u00e9rite de ses revendications: le jeton qu&rsquo;il obtient pr\u00e9sente d\u00e9j\u00e0 le MFA et la conformit\u00e9 de l&rsquo;appareil, et franchit donc une politique qui les exige.<\/p>\n<p>C&rsquo;est pourquoi l&rsquo;acc\u00e8s conditionnel est \u00e0 la fois la cible et la d\u00e9fense. C\u00f4t\u00e9 d\u00e9fense, plusieurs leviers s&#8217;empilent: exiger un <strong>appareil conforme<\/strong> ou joint hybride pour acc\u00e9der aux ressources; la <strong>Token Protection<\/strong>, un contr\u00f4le de session qui n&rsquo;accepte qu&rsquo;un jeton li\u00e9 cryptographiquement \u00e0 l&rsquo;appareil; une <strong>fr\u00e9quence de connexion<\/strong> qui force une r\u00e9authentification p\u00e9riodique; un <strong>contexte d&rsquo;authentification<\/strong> qui r\u00e9clame une authentification interactive r\u00e9sistante au phishing pour les op\u00e9rations sensibles, comme l&rsquo;activation d&rsquo;un r\u00f4le dans PIM; et des <strong>politiques bas\u00e9es sur le risque<\/strong> qui, sur un jeton anormal, exigent une r\u00e9authentification que l&rsquo;attaquant ne peut pas produire. Aucun de ces leviers n&rsquo;est \u00e9valu\u00e9 \u00e0 l&rsquo;\u00e9mission du PRT: ils ne mordent qu&rsquo;au moment o\u00f9 le jeton sert, ce qui en fait le bon endroit pour arr\u00eater un jeton vol\u00e9.<\/p>\n<h2>D\u00e9fenses<\/h2>\n<figure class=\"wp-block-image\">\n<svg viewBox=\"0 0 720 272\" width=\"100%\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" font-family=\"sans-serif\" font-size=\"12\">\n<rect x=\"15\" y=\"40\" width=\"220\" height=\"218\" rx=\"6\" fill=\"#e8f0fe\" stroke=\"#333\"\/>\n<rect x=\"15\" y=\"40\" width=\"220\" height=\"30\" rx=\"6\" fill=\"#c7dbfb\" stroke=\"#333\"\/>\n<text x=\"125\" y=\"60\" text-anchor=\"middle\" font-weight=\"bold\">R\u00e9duire la surface<\/text>\n<text x=\"30\" y=\"94\">\u2022 TPM obligatoire<\/text>\n<text x=\"30\" y=\"118\">\u2022 Defender for Endpoint<\/text>\n<text x=\"30\" y=\"142\">\u2022 Conformit\u00e9 Intune (CA)<\/text>\n<text x=\"30\" y=\"166\">\u2022 Credential Guard<\/text>\n<text x=\"30\" y=\"190\">\u2022 Filtrage web (GSA)<\/text>\n<text x=\"30\" y=\"214\" font-size=\"11\" fill=\"#5b6170\">rendre le vol plus<\/text>\n<text x=\"30\" y=\"230\" font-size=\"11\" fill=\"#5b6170\">difficile<\/text>\n<rect x=\"250\" y=\"40\" width=\"220\" height=\"218\" rx=\"6\" fill=\"#fef7e0\" stroke=\"#333\"\/>\n<rect x=\"250\" y=\"40\" width=\"220\" height=\"30\" rx=\"6\" fill=\"#fbeeb8\" stroke=\"#333\"\/>\n<text x=\"360\" y=\"60\" text-anchor=\"middle\" font-weight=\"bold\">D\u00e9tecter &amp; att\u00e9nuer<\/text>\n<text x=\"265\" y=\"94\">\u2022 Identity Protection<\/text>\n<text x=\"265\" y=\"112\" font-size=\"10.5\" fill=\"#5b6170\">(Anomalous Token\u2026)<\/text>\n<text x=\"265\" y=\"136\">\u2022 Defender XDR (AiTM)<\/text>\n<text x=\"265\" y=\"160\">\u2022 Journaux non interactifs<\/text>\n<text x=\"265\" y=\"184\">\u2022 Acc\u00e8s conditionnel<\/text>\n<text x=\"265\" y=\"200\" font-size=\"10.5\" fill=\"#5b6170\">bas\u00e9 sur le risque<\/text>\n<text x=\"265\" y=\"226\" font-size=\"11\" fill=\"#5b6170\">rep\u00e9rer la compromission<\/text>\n<rect x=\"485\" y=\"40\" width=\"220\" height=\"218\" rx=\"6\" fill=\"#e6f4ea\" stroke=\"#333\"\/>\n<rect x=\"485\" y=\"40\" width=\"220\" height=\"30\" rx=\"6\" fill=\"#bfe5cc\" stroke=\"#333\"\/>\n<text x=\"595\" y=\"60\" text-anchor=\"middle\" font-weight=\"bold\">Emp\u00eacher le rejeu<\/text>\n<text x=\"500\" y=\"94\">\u2022 Token Protection<\/text>\n<text x=\"500\" y=\"110\" font-size=\"10.5\" fill=\"#5b6170\">(jeton li\u00e9 \u00e0 l&rsquo;appareil)<\/text>\n<text x=\"500\" y=\"134\">\u2022 R\u00e9seau conforme (GSA)<\/text>\n<text x=\"500\" y=\"158\">\u2022 CAE<\/text>\n<text x=\"500\" y=\"174\" font-size=\"10.5\" fill=\"#5b6170\">(r\u00e9vocation quasi<\/text>\n<text x=\"500\" y=\"189\" font-size=\"10.5\" fill=\"#5b6170\">temps r\u00e9el)<\/text>\n<text x=\"500\" y=\"226\" font-size=\"11\" fill=\"#5b6170\">neutraliser le jeton vol\u00e9<\/text>\n<text x=\"360\" y=\"24\" text-anchor=\"middle\" font-weight=\"bold\" font-size=\"13\">D\u00e9fense en profondeur contre le vol de jetons<\/text>\n<\/svg><br \/>\n<\/figure>\n<p style=\"text-align:center\"><em>Les trois temps de la d\u00e9fense selon Microsoft : r\u00e9duire la surface, d\u00e9tecter, emp\u00eacher le rejeu.<\/em><\/p>\n<p>La premi\u00e8re d\u00e9fense est mat\u00e9rielle: exiger le TPM. Un parc en <code>TpmProtected: YES<\/code> fait passer le vol de \u00ab copier un blob \u00bb \u00e0 \u00ab compromettre durablement la machine \u00bb. C&rsquo;est le socle sur lequel tout le reste s&rsquo;appuie.<\/p>\n<p>La deuxi\u00e8me est la <a href=\"https:\/\/learn.microsoft.com\/en-us\/entra\/identity\/conditional-access\/concept-token-protection\">Token Protection<\/a> (protection des jetons), un contr\u00f4le de session de l&rsquo;acc\u00e8s conditionnel qui n&rsquo;accepte que des jetons de session li\u00e9s \u00e0 l&rsquo;appareil: un jeton vol\u00e9 est refus\u00e9 depuis un autre poste. Elle est en disponibilit\u00e9 g\u00e9n\u00e9rale pour les applications natives sous Windows (Exchange Online, SharePoint Online, Teams, plus AVD et Windows 365), encore en pr\u00e9version pour le navigateur et limit\u00e9e \u00e0 Azure Resource Manager. Elle demande Entra ID P2 \u00e0 la disponibilit\u00e9 g\u00e9n\u00e9rale, et Microsoft recommande de la d\u00e9ployer d&rsquo;abord en mode \u00ab report-only \u00bb pour mesurer la compatibilit\u00e9 des applications.<\/p>\n<p>Le reste rel\u00e8ve de la d\u00e9fense en profondeur: acc\u00e8s conditionnel exigeant un appareil conforme ou joint hybride et tenant compte du risque de connexion; surveillance des journaux de connexion pour rep\u00e9rer un PRT utilis\u00e9 depuis un appareil inattendu ou un voyage impossible; r\u00e9duction de la surface d&rsquo;ex\u00e9cution de code (moins d&rsquo;administrateurs locaux, Credential Guard, EDR sur le broker). Et en cas de doute, la seule r\u00e9ponse fiable est la r\u00e9vocation des jetons de rafra\u00eechissement (horodatage <code>refreshTokensValidFromDateTime<\/code>, via <em>revokeSignInSessions<\/em> dans Graph) et, pour un PRT obtenu par mot de passe, le changement de mot de passe.<\/p>\n<h2>D\u00e9tecter et r\u00e9pondre<\/h2>\n<p>Microsoft range la d\u00e9fense contre le vol de jetons en trois temps: r\u00e9duire la surface, d\u00e9tecter et att\u00e9nuer, emp\u00eacher le rejeu. Le premier temps est celui des d\u00e9fenses vues plus haut, TPM et Token Protection en t\u00eate. Restent la d\u00e9tection et la r\u00e9ponse, car aucun durcissement n&rsquo;est parfait, et la <a href=\"https:\/\/learn.microsoft.com\/en-us\/entra\/identity\/devices\/protecting-tokens-microsoft-entra-id\">documentation de Microsoft sur la protection des jetons<\/a> les d\u00e9crit en d\u00e9tail.<\/p>\n<p><strong>D\u00e9tecter.<\/strong> Un PRT rejou\u00e9 ne ressemble pas tout \u00e0 fait \u00e0 une connexion normale, et c&rsquo;est l\u00e0 que \u00e7a se voit. Entra ID Protection l\u00e8ve des d\u00e9tections d\u00e9di\u00e9es \u2014 \u00ab Anomalous Token \u00bb, \u00ab Attacker in the Middle \u00bb, \u00ab Unfamiliar sign-in properties \u00bb \u2014 et Microsoft Defender XDR, via les connecteurs Defender for Cloud Apps, alerte \u00ab Stolen session cookie was used \u00bb quand un cookie de session est rejou\u00e9. Sur le poste, Defender for Endpoint d\u00e9tecte les tentatives d&rsquo;acc\u00e8s aux artefacts du PRT sous Windows. C\u00f4t\u00e9 journaux, c&rsquo;est dans les connexions non interactives qu&rsquo;il faut chercher: une m\u00eame session vue depuis plusieurs adresses IP ou pays, ou un encha\u00eenement jeton de rafra\u00eechissement puis PRT depuis le m\u00eame appareil en moins d&rsquo;une heure, trahissent un rejeu. Le <a href=\"https:\/\/learn.microsoft.com\/en-us\/security\/operations\/token-theft-playbook\">guide de r\u00e9ponse au vol de jetons<\/a> de Microsoft d\u00e9taille la marche \u00e0 suivre.<\/p>\n<p><strong>Un atout du nonce.<\/strong> Le cookie de PRT est li\u00e9 \u00e0 un nonce de la page de connexion. Un cookie captur\u00e9 une fois expire donc vite; pour en produire \u00e0 volont\u00e9, l&rsquo;attaquant doit garder son ex\u00e9cution de code sur le poste, ce qui multiplie les occasions de le rep\u00e9rer par l&rsquo;EDR. La liaison cryptographique ne se contente pas de compliquer le rejeu, elle force l&rsquo;attaquant \u00e0 rester visible.<\/p>\n<p><strong>R\u00e9pondre.<\/strong> D\u00e9sactiver l&rsquo;appareil ne suffit pas. La seule coupure fiable est la r\u00e9vocation des jetons de rafra\u00eechissement \u2014 l&rsquo;horodatage <code>refreshTokensValidFromDateTime<\/code>, pos\u00e9 par <em>revokeSignInSessions<\/em> dans Graph \u2014 doubl\u00e9e d&rsquo;un changement de mot de passe pour un PRT obtenu par mot de passe. Les applications compatibles Continuous Access Evaluation (CAE) appliquent cette r\u00e9vocation en quasi temps r\u00e9el, et un score de risque utilisateur \u00e9lev\u00e9 peut d\u00e9clencher automatiquement le blocage ou la r\u00e9initialisation du compte. Associ\u00e9e \u00e0 la Token Protection, cette r\u00e9ponse ram\u00e8ne la fen\u00eatre d&rsquo;exploitation de quelques jours \u00e0 quelques minutes.<\/p>\n<p>Le PRT est la charni\u00e8re entre l&rsquo;ouverture de session Windows et le SSO web. Bien scell\u00e9e dans le TPM, prot\u00e9g\u00e9e par la Token Protection et r\u00e9vocable, elle reste une commodit\u00e9. N\u00e9glig\u00e9e sur un poste sans TPM et sans r\u00e9vocation, elle devient un passe-partout.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Structure du PRT d&rsquo;Entra ID, cl\u00e9 de session scell\u00e9e par le TPM, cookie x-ms-RefreshTokenCredential, risque pass-the-PRT et d\u00e9fenses (Token Protection, r\u00e9vocation).<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[80,84,9,85],"class_list":["post-1265","post","type-post","status-publish","format-standard","hentry","category-active-directory","tag-entra-id","tag-prt","tag-sso","tag-tpm"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Anatomie du Primary Refresh Token Entra ID - R\u00e9mi VERNIER<\/title>\n<meta name=\"description\" content=\"Structure du PRT d&#039;Entra ID, cl\u00e9 de session scell\u00e9e par le TPM, cookie x-ms-RefreshTokenCredential, risque pass-the-PRT et d\u00e9fenses (Token Protection, r\u00e9vocation).\" \/>\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\/2026\/10\/28\/anatomie-primary-refresh-token-entra-id\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Anatomie du Primary Refresh Token Entra ID - R\u00e9mi VERNIER\" \/>\n<meta property=\"og:description\" content=\"Structure du PRT d&#039;Entra ID, cl\u00e9 de session scell\u00e9e par le TPM, cookie x-ms-RefreshTokenCredential, risque pass-the-PRT et d\u00e9fenses (Token Protection, r\u00e9vocation).\" \/>\n<meta property=\"og:url\" content=\"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/anatomie-primary-refresh-token-entra-id\/\" \/>\n<meta property=\"og:site_name\" content=\"R\u00e9mi VERNIER\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-28T14:12:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-28T17:49:49+00:00\" \/>\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=\"18 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/10\\\/28\\\/anatomie-primary-refresh-token-entra-id\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/10\\\/28\\\/anatomie-primary-refresh-token-entra-id\\\/\"},\"author\":{\"name\":\"R\u00e9mi\",\"@id\":\"https:\\\/\\\/remivernier.com\\\/#\\\/schema\\\/person\\\/a4c76c63a5a3d94454484845e42fc906\"},\"headline\":\"Anatomie du Primary Refresh Token Entra ID\",\"datePublished\":\"2026-10-28T14:12:07+00:00\",\"dateModified\":\"2026-10-28T17:49:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/10\\\/28\\\/anatomie-primary-refresh-token-entra-id\\\/\"},\"wordCount\":3676,\"commentCount\":0,\"keywords\":[\"entra id\",\"PRT\",\"SSO\",\"TPM\"],\"articleSection\":[\"Active Directory\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/10\\\/28\\\/anatomie-primary-refresh-token-entra-id\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/10\\\/28\\\/anatomie-primary-refresh-token-entra-id\\\/\",\"url\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/10\\\/28\\\/anatomie-primary-refresh-token-entra-id\\\/\",\"name\":\"Anatomie du Primary Refresh Token Entra ID - R\u00e9mi VERNIER\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/remivernier.com\\\/#website\"},\"datePublished\":\"2026-10-28T14:12:07+00:00\",\"dateModified\":\"2026-10-28T17:49:49+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/remivernier.com\\\/#\\\/schema\\\/person\\\/a4c76c63a5a3d94454484845e42fc906\"},\"description\":\"Structure du PRT d'Entra ID, cl\u00e9 de session scell\u00e9e par le TPM, cookie x-ms-RefreshTokenCredential, risque pass-the-PRT et d\u00e9fenses (Token Protection, r\u00e9vocation).\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/10\\\/28\\\/anatomie-primary-refresh-token-entra-id\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/10\\\/28\\\/anatomie-primary-refresh-token-entra-id\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/10\\\/28\\\/anatomie-primary-refresh-token-entra-id\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/remivernier.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Anatomie du Primary Refresh Token Entra ID\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/remivernier.com\\\/#website\",\"url\":\"https:\\\/\\\/remivernier.com\\\/\",\"name\":\"R\u00e9mi VERNIER\",\"description\":\"Identit\u00e9, s\u00e9curit\u00e9, SAP et IA : Active Directory, Azure &amp; co...\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/remivernier.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"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:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f750448bc07f5d1d9c1189344283777ec0d33275c184599b199fb6b305bc6fba?s=96&d=mm&r=g\",\"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":"Anatomie du Primary Refresh Token Entra ID - R\u00e9mi VERNIER","description":"Structure du PRT d'Entra ID, cl\u00e9 de session scell\u00e9e par le TPM, cookie x-ms-RefreshTokenCredential, risque pass-the-PRT et d\u00e9fenses (Token Protection, r\u00e9vocation).","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\/2026\/10\/28\/anatomie-primary-refresh-token-entra-id\/","og_locale":"fr_FR","og_type":"article","og_title":"Anatomie du Primary Refresh Token Entra ID - R\u00e9mi VERNIER","og_description":"Structure du PRT d'Entra ID, cl\u00e9 de session scell\u00e9e par le TPM, cookie x-ms-RefreshTokenCredential, risque pass-the-PRT et d\u00e9fenses (Token Protection, r\u00e9vocation).","og_url":"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/anatomie-primary-refresh-token-entra-id\/","og_site_name":"R\u00e9mi VERNIER","article_published_time":"2026-10-28T14:12:07+00:00","article_modified_time":"2026-10-28T17:49:49+00:00","author":"R\u00e9mi","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"R\u00e9mi","Dur\u00e9e de lecture estim\u00e9e":"18 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/anatomie-primary-refresh-token-entra-id\/#article","isPartOf":{"@id":"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/anatomie-primary-refresh-token-entra-id\/"},"author":{"name":"R\u00e9mi","@id":"https:\/\/remivernier.com\/#\/schema\/person\/a4c76c63a5a3d94454484845e42fc906"},"headline":"Anatomie du Primary Refresh Token Entra ID","datePublished":"2026-10-28T14:12:07+00:00","dateModified":"2026-10-28T17:49:49+00:00","mainEntityOfPage":{"@id":"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/anatomie-primary-refresh-token-entra-id\/"},"wordCount":3676,"commentCount":0,"keywords":["entra id","PRT","SSO","TPM"],"articleSection":["Active Directory"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/remivernier.com\/index.php\/2026\/10\/28\/anatomie-primary-refresh-token-entra-id\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/anatomie-primary-refresh-token-entra-id\/","url":"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/anatomie-primary-refresh-token-entra-id\/","name":"Anatomie du Primary Refresh Token Entra ID - R\u00e9mi VERNIER","isPartOf":{"@id":"https:\/\/remivernier.com\/#website"},"datePublished":"2026-10-28T14:12:07+00:00","dateModified":"2026-10-28T17:49:49+00:00","author":{"@id":"https:\/\/remivernier.com\/#\/schema\/person\/a4c76c63a5a3d94454484845e42fc906"},"description":"Structure du PRT d'Entra ID, cl\u00e9 de session scell\u00e9e par le TPM, cookie x-ms-RefreshTokenCredential, risque pass-the-PRT et d\u00e9fenses (Token Protection, r\u00e9vocation).","breadcrumb":{"@id":"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/anatomie-primary-refresh-token-entra-id\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/remivernier.com\/index.php\/2026\/10\/28\/anatomie-primary-refresh-token-entra-id\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/remivernier.com\/index.php\/2026\/10\/28\/anatomie-primary-refresh-token-entra-id\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/remivernier.com\/"},{"@type":"ListItem","position":2,"name":"Anatomie du Primary Refresh Token Entra ID"}]},{"@type":"WebSite","@id":"https:\/\/remivernier.com\/#website","url":"https:\/\/remivernier.com\/","name":"R\u00e9mi VERNIER","description":"Identit\u00e9, s\u00e9curit\u00e9, SAP et IA : Active Directory, Azure &amp; co...","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/remivernier.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"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:\/\/secure.gravatar.com\/avatar\/f750448bc07f5d1d9c1189344283777ec0d33275c184599b199fb6b305bc6fba?s=96&d=mm&r=g","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\/1265","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=1265"}],"version-history":[{"count":3,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/posts\/1265\/revisions"}],"predecessor-version":[{"id":1269,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/posts\/1265\/revisions\/1269"}],"wp:attachment":[{"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/media?parent=1265"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/categories?post=1265"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/tags?post=1265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}