Introduction : l'incident IT1420224 et l'erreur 0x81036501
Lorsqu'un appareil Windows Autopilot entre dans son flux d'enrollment et ne rejoint jamais Microsoft Intune, l'instinct premier est de vérifier la configuration locale : scope MDM, licence utilisateur, connectivité réseau. Mais que se passe-t-il lorsque tous ces paramètres sont corrects, que plusieurs appareils de plusieurs tenants échouent de façon identique, et que l'anomalie se situe entièrement côté backend Microsoft ?
C'est exactement ce qui s'est produit dans l'incident IT1420224, où des tenants hébergés sur l'Azure Scale Unit (ASU) 0102 ont subi une interruption totale de l'enrollment Intune via Autopilot, renvoyant systématiquement le code d'erreur 0x81036501 : Expected MDM URI was not found.
Cet article décortique la chaîne de causalité complète : de la lecture des logs de diagnostic jusqu'à l'architecture interne du service de politique MDM, en passant par la migration Azure AD Graph vers Microsoft Graph qui est à l'origine du problème.

Symptomatologie initiale : un enrollment silencieusement raté
Le premier signal perturbant dans ce type d'incident est l'absence de signal d'erreur visible en début de flow. Les appareils entrent normalement dans le flux Autopilot, progressent à travers l'étape d'enrollment Entra ID (Azure AD Join), mais ignorent complètement la phase d'enrollment Intune, y compris l'Enrollment Status Page (ESP).
Plusieurs appareils appartenant à des tenants distincts ont été analysés. Tous échouaient de façon parfaitement identique. Ce pattern est fondamental : lorsque des machines différentes, sur des tenants différents, produisent le même comportement défaillant, on élimine immédiatement les causes locales telles que :
- Un profil Autopilot mal configuré sur un tenant spécifique
- Un problème de pilote réseau ou de proxy sur un appareil particulier
- Une configuration incorrecte du scope MDM propre Ă un tenant
- Une licence Intune manquante pour un utilisateur donné
[IMAGE:2:data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20624%20267'%3E%3C/svg%3E:]
Vérifications préliminaires standards
Avant d'escalader vers une analyse de backend, il est impératif de valider les éléments suivants dans le portail Entra ID et Intune : scope MDM (All Users / Some Users / None), présence d'une licence Intune active sur le compte UPN, absence de politique MDM invalide ou orpheline dans Microsoft Graph via GET https://graph.microsoft.com/beta/policies/mobileDeviceManagementPolicies.
Délimitation du périmètre d'impact : l'importance de l'Azure Scale Unit
Avant d'analyser les logs, la première question opérationnelle est : quel est le rayon d'impact ? S'agit-il d'un tenant isolé, d'une région Azure, d'une Scale Unit spécifique, ou d'un problème global ?
La notion d'Azure Scale Unit (ASU) est centrale dans l'architecture d'Entra ID. Microsoft découpe son infrastructure d'identité en unités de mise à l'échelle indépendantes. Chaque tenant est assigné à une ASU spécifique. Les déploiements de code et les migrations de service peuvent être effectués de façon progressive par ASU, ce qui explique pourquoi un incident peut affecter certains tenants mais pas d'autres.
[IMAGE:4:data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20658%20259'%3E%3C/svg%3E:]
Dans ce cas, l'ensemble des tenants impactés étaient localisés sur l'ASU 0102. Cette corrélation est déterminante pour deux raisons :
- Elle exclut définitivement toute cause locale ou de configuration tenant
- Elle oriente l'investigation vers un changement de code ou de service déployé spécifiquement sur cette ASU
Comment identifier l'ASU de votre tenant
Vous pouvez identifier l'Azure Scale Unit de votre tenant en analysant les endpoints de découverte OpenID Connect : https://login.microsoftonline.com/{tenantId}/.well-known/openid-configuration. Les identifiants d'ASU apparaissent également dans les logs Entra ID de niveau diagnostic et dans les traces Fiddler lors des flux d'authentication.
Analyse des logs : ModernDeployment Diagnostics et dsregcmd
Les logs ModernDeployment Diagnostics constituent la source d'information primaire pour le diagnostic Autopilot. Ils sont accessibles via l'outil de collecte de logs intégré à l'ESP ou manuellement sur le poste via :
1# Collecte des logs Autopilot et MDM2mdmdiagnosticstool.exe -area Autopilot -cab C:\MDMLogs\AutopilotDiag.cabDans ces logs, les deux appareils analysés ont échoué lors de la phase DeviceDiscovery avec le même HRESULT :
1HRESULT: 0x810365012Message: Expected MDM URI was not found[IMAGE:5:data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20658%20249'%3E%3C/svg%3E:0x81036501]
La ligne de log la plus significative précise : Mobile Device Management MDM is not configured. Ce message est bien plus informatif que le code d'erreur seul : il indique que Windows n'a pas trouvé de configuration MDM valide dans les informations reçues lors du join Entra.
[IMAGE:7:data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20658%20165'%3E%3C/svg%3E:]
La commande dsregcmd /status confirme le diagnostic côté appareil :
1# Exécuter en tant qu'administrateur local2dsregcmd /statusDans la sortie, le champ MDMUrl apparaît vide ou absent :
1+----------------------------------------------------------------------+2| Device State |3+----------------------------------------------------------------------+4 5 AzureAdJoined : YES6 EnterpriseJoined : NO7 DomainJoined : NO8 Device Name : DESKTOP-XXXXXXX9 10+----------------------------------------------------------------------+11| Device Details |12+----------------------------------------------------------------------+13 14 TenantId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx15 Tenant Name : contoso.onmicrosoft.com16 MDMUrl : <-- VIDE : cause de l'échec17 MDMToUrl :18 MDMComplianceUrl :[IMAGE:6:data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20658%20129'%3E%3C/svg%3E:]
Impact direct
Si le champ MDMUrl est absent dans la sortie de dsregcmd /status, aucun enrollment automatique dans Intune ne se produira. L'appareil peut ĂŞtre Entra Joined, mais il n'initiera jamais la communication avec le service MDM Intune.
Contournement temporaire : injection manuelle des URLs MDM dans le registre
En situation d'urgence opérationnelle, il est possible de forcer manuellement l'enrollment Intune en injectant les URLs MDM directement dans le registre Windows. Cette approche est un workaround temporaire et ne substitue pas à la résolution du problème backend.
1# Script PowerShell - Injection manuelle des URLs MDM Intune dans le registre2# À exécuter en contexte SYSTEM ou administrateur local3# Référence : https://learn.microsoft.com/en-us/windows/client-management/mdm/mdm-enrollment-of-windows-devices4 5$key = 'SYSTEM\CurrentControlSet\Control\CloudDomainJoin\TenantInfo\*'6 7# Récupération dynamique du TenantId depuis le registre8$keyinfo = Get-Item "HKLM:$key"9$url = $keyinfo.name10$url = $url.Split("\\")[-1]11$path = "HKLM:\SYSTEM\CurrentControlSet\Control\CloudDomainJoin\TenantInfo\$url"12 13Write-Host "Chemin de registre ciblé : $path" -ForegroundColor Cyan14 15# Injection de l'URL d'enrollment MDM Intune16New-ItemProperty -LiteralPath $path `17 -Name 'MdmEnrollmentUrl' `18 -Value 'https://enrollment.manage.microsoft.com/enrollmentserver/discovery.svc' `19 -PropertyType String -Force -ea SilentlyContinue20 21# Injection de l'URL des conditions d'utilisation22New-ItemProperty -LiteralPath $path `23 -Name 'MdmTermsOfUseUrl' `24 -Value 'https://portal.manage.microsoft.com/TermsofUse.aspx' `25 -PropertyType String -Force -ea SilentlyContinue26 27# Injection de l'URL de conformité28New-ItemProperty -LiteralPath $path `29 -Name 'MdmComplianceUrl' `30 -Value 'https://portal.manage.microsoft.com/?portalAction=Compliance' `31 -PropertyType String -Force -ea SilentlyContinue32 33Write-Host "URLs MDM injectées avec succès. Vérification :" -ForegroundColor Green34Get-ItemProperty -LiteralPath $path | Select-Object MdmEnrollmentUrl, MdmTermsOfUseUrl, MdmComplianceUrlUsage limité du workaround
Ce script ne doit être utilisé qu'en contexte de dépannage urgent, sur des appareils déjà Entra Joined, et uniquement lorsque la cause backend est confirmée. Il ne remplace pas la résolution du problème au niveau du service Microsoft. Si le backend remet un token valide, ces valeurs de registre seront écrasées lors du prochain cycle d'enrollment.
Architecture du claim MDM_Enrollment_URL dans le token d'identité
Pour comprendre pourquoi l'absence d'un seul champ dans un token peut bloquer l'intégralité de l'enrollment, il faut comprendre le rôle du claim MDM_Enrollment_URL dans le flux Autopilot.
Lors d'un Entra ID Join initié par Autopilot, Windows effectue les opérations suivantes :
- Device Discovery : Windows contacte le endpoint de découverte Autopilot
- Entra Join : Le device obtient un token d'identité via le flux d'authentication Entra
- Lecture du claim MDM : Windows inspecte le token pour extraire le claim
MDM_Enrollment_URL - MDM Enrollment : Windows utilise cette URL pour initier l'enrollment vers Intune
[IMAGE:8:data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20336%20229'%3E%3C/svg%3E:mdm_enrollment_URL neededd]
Si le claim MDM_Enrollment_URL est absent du token, Windows peut tout de même compléter le join Entra (car ce claim n'est pas requis pour cette étape), mais l'enrollment MDM automatique est impossible. L'appareil devient Entra Joined sans être Intune Managed.
[IMAGE:9:data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201024%20576'%3E%3C/svg%3E:]
Voici comment interroger l'état actuel de la politique MDM via Microsoft Graph pour valider la configuration :
1# Vérification de la politique MDM via Microsoft Graph2# Nécessite le module Microsoft.Graph ou une authentification OAuth 2.03 4# Installation du module si nécessaire5Install-Module Microsoft.Graph -Scope CurrentUser -Force6 7Connect-MgGraph -Scopes "Policy.Read.All"8 9# Récupération des politiques MDM configurées10$mdmPolicies = Invoke-MgGraphRequest -Method GET `11 -Uri "https://graph.microsoft.com/beta/policies/mobileDeviceManagementPolicies"12 13$mdmPolicies.value | Select-Object displayName, isValid, appliesTo, discoveryUrl, complianceUrl, termsOfUseUrlLa sortie attendue pour un tenant correctement configuré pour Intune :
1{2 "displayName": "Microsoft Intune",3 "isValid": true,4 "appliesTo": "all",5 "discoveryUrl": "https://enrollment.manage.microsoft.com/enrollmentserver/discovery.svc",6 "complianceUrl": "https://portal.manage.microsoft.com/?portalAction=Compliance",7 "termsOfUseUrl": "https://portal.manage.microsoft.com/TermsofUse.aspx"8}Analyse de la chaîne de lookup : Azure AD Graph vs Microsoft Graph
La compréhension de l'incident nécessite de disséquer les deux modèles de données utilisés successivement par le backend Microsoft pour résoudre les informations MDM.
L'ancien modèle Azure AD Graph (déprécié)
Dans l'architecture Azure AD Graph, le backend résolvait l'URL d'enrollment MDM via une chaîne de lookup en trois étapes :
Étape 1 — Lecture de la politique DefaultMDMPolicy
Le backend interrogeait Azure AD Graph pour récupérer l'objet DefaultMDMPolicy :
policyType: 5tenantDefaultPolicy: 5- Le champ
policyDetailcontenait une référence au Microsoft Intune AppId
[IMAGE:12:data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201024%20157'%3E%3C/svg%3E:]
Étape 2 — Résolution du Service Principal Intune
L'AppId référencé dans DefaultMDMPolicy est 0000000a-0000-0000-c000-000000000000, soit le Service Principal Microsoft Intune.
[IMAGE:13:data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20364%20219'%3E%3C/svg%3E:]
Le backend résolvait ce Service Principal et lisait son champ appData, qui contenait les URLs d'enrollment réelles :
[IMAGE:14:data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20866%20234'%3E%3C/svg%3E:]
Étape 3 — Construction du claim token
Le backend extrayait la valeur EnrollmentUrl depuis appData et l'injectait dans le token d'identité sous le claim mdm_enrollment_url.
[IMAGE:15:data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20265%201024'%3E%3C/svg%3E:]
La chaîne complète était donc : DefaultMDMPolicy → AppId Intune → Service Principal → appData → EnrollmentUrl → claim token
Le nouveau modèle Microsoft Graph
Microsoft Graph expose la politique MDM via un endpoint dédié :
1GET https://graph.microsoft.com/beta/policies/mobileDeviceManagementPoliciesLe modèle de données est structurellement différent. La ressource mobileDeviceManagementPolicy expose directement les URLs sans passer par un Service Principal intermédiaire :
[IMAGE:16:data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201024%2099'%3E%3C/svg%3E:]
1{2 "@odata.type": "#microsoft.graph.mobilityManagementPolicy",3 "id": "0000000a-0000-0000-c000-000000000000",4 "displayName": "Microsoft Intune",5 "discoveryUrl": "https://enrollment.manage.microsoft.com/enrollmentserver/discovery.svc",6 "complianceUrl": "https://portal.manage.microsoft.com/?portalAction=Compliance",7 "termsOfUseUrl": "https://portal.manage.microsoft.com/TermsofUse.aspx",8 "appliesTo": "all",9 "isValid": true,10 "isMdmEnrollmentDuringRegistrationDisabled": false11}Référence officielle : mobileDeviceManagementPolicy resource type — Microsoft Learn
| Attribut | Azure AD Graph (ancien) | Microsoft Graph (nouveau) |
|---|---|---|
| Endpoint | graph.windows.net (interne backend) | graph.microsoft.com/beta/policies/mobileDeviceManagementPolicies |
| Objet principal | DefaultMDMPolicy (policyType 5) | mobilityManagementPolicy |
| Résolution URL | Via Service Principal appData | Champ discoveryUrl direct |
| Nombre d'étapes | 3 lookups chaînés | 1 lookup direct |
| Claim token produit | mdm_enrollment_url | mdm_enrollment_url (attendu) |
| Statut | Déprécié / en cours de retrait | Actif et recommandé |
Cause racine de l'incident IT1420224
Microsoft a confirmé dans l'incident IT1420224 que la migration du Mobility Management Policy Service depuis Azure AD Graph vers Microsoft Graph avait omis le claim MDM_Enrollment_URL dans les tokens émis lors de l'enrollment des appareils sur l'ASU 0102.
[IMAGE:10:data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20658%20106'%3E%3C/svg%3E:0x81036501 IT1420224]
La séquence de défaillance peut être reconstituée comme suit :
[IMAGE:17:data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20354%201024%3E%3C/svg%3E:]
Device Discovery Autopilot
L'appareil Windows initie le flux Autopilot et contacte le service de discovery. Le backend traite la requĂŞte sur l'ASU 0102.
RequĂŞte de politique MDM au backend
Le backend Entra effectue la migration et interroge désormais Microsoft Graph au lieu d'Azure AD Graph pour résoudre la politique MDM :
1GET https://graph.microsoft.com/beta/policies/mobileDeviceManagementPoliciesDéfaillance du mapping discoveryUrl → mdm_enrollment_url
Le nouveau code de migration sur l'ASU 0102 ne mappe pas correctement le champ discoveryUrl vers le claim mdm_enrollment_url dans le token d'identité émis. Le champ est absent du token retourné à Windows.
Entra Join réussi, MDM Enrollment impossible
Windows reçoit un token valide pour l'Entra Join (le claim mdm_enrollment_url n'est pas requis pour cette étape). Le join Entra se complète. Mais Windows ne dispose d'aucune URL vers laquelle initier l'enrollment MDM.
Échec avec 0x81036501 après 14 minutes de retry
Windows tente pendant environ 14 minutes de résoudre l'URI MDM. Après épuisement des tentatives, le flux Autopilot échoue avec :
1HRESULT: 0x810365012Expected MDM URI was not foundContexte : la migration Azure AD Graph vers Microsoft Graph
Azure AD Graph est officiellement en cours de retrait depuis plusieurs années. Le calendrier de dépréciation Microsoft est le suivant :
- Juin 2023 : Fin de la période de dépréciation de trois ans, entrée en phase de retirement
- Août 2024 : Les nouvelles applications ne peuvent plus utiliser Azure AD Graph sans opt-in explicite
- 2025-2026 : Migration progressive des services internes Microsoft
[IMAGE:11:data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20658%20209'%3E%3C/svg%3E:]
Référence officielle : Migrate your apps from Azure AD Graph to Microsoft Graph — Microsoft Learn
Ce que cet incident démontre de façon particulièrement frappante, c'est qu'une migration d'API perçue comme technique et transparente peut avoir des conséquences fonctionnelles critiques lorsqu'elle touche un chemin de code impliqué dans la construction de tokens d'authentification. Le fait que le modèle de données de Microsoft Graph soit différent de celui d'Azure AD Graph ne signifie pas que le comportement final (le claim injecté dans le token) peut être reproduit à l'identique sans une validation exhaustive.
Leçon architecturale
Lorsqu'un service de backend change sa source de données pour la construction de claims dans des tokens d'identité, chaque claim doit faire l'objet d'un test de régression explicite en environnement de pré-production, idéalement avec une capture et comparaison de tokens JWT avant/après migration. Des outils comme jwt.ms permettent de décoder et inspecter les claims d'un token Entra ID.
Diagnostic complet : procédure de vérification recommandée
Pour tout administrateur confronté à l'erreur 0x81036501 dans un contexte Autopilot, voici la procédure de vérification systématique recommandée :
Vérification 1 : état de l'appareil avec dsregcmd
1# Exécuter en session locale sur l'appareil concerné2dsregcmd /status3 4# Champs clés à vérifier dans la section Device State5# AzureAdJoined : YES (join Entra réussi)6# MDMUrl : (doit contenir l'URL enrollment Intune)7# MDMToUrl : (URL Terms of Use)8# MDMComplianceUrl : (URL Compliance)Vérification 2 : contenu du registre CloudDomainJoin
1# Lecture des informations MDM stockées dans le registre post-join2$key = 'SYSTEM\CurrentControlSet\Control\CloudDomainJoin\TenantInfo\*'3$keyinfo = Get-Item "HKLM:$key"4$tenantId = $keyinfo.name.Split("\\")[-1]5$path = "HKLM:\SYSTEM\CurrentControlSet\Control\CloudDomainJoin\TenantInfo\$tenantId"6 7Get-ItemProperty -LiteralPath $path | Select-Object MdmEnrollmentUrl, MdmTermsOfUseUrl, MdmComplianceUrl8# Si MdmEnrollmentUrl est vide ou absent : le claim MDM était manquant dans le tokenVérification 3 : politique MDM via Microsoft Graph
1# Validation de la configuration MDM côté tenant2Connect-MgGraph -Scopes "Policy.Read.All"3 4$response = Invoke-MgGraphRequest -Method GET `5 -Uri "https://graph.microsoft.com/beta/policies/mobileDeviceManagementPolicies"6 7$response.value | ForEach-Object {8 [PSCustomObject]@{9 DisplayName = $_.displayName10 IsValid = $_.isValid11 AppliesTo = $_.appliesTo12 DiscoveryUrl = $_.discoveryUrl13 ComplianceUrl = $_.complianceUrl14 TermsOfUseUrl = $_.termsOfUseUrl15 EnrollmentDisabled = $_.isMdmEnrollmentDuringRegistrationDisabled16 }17} | Format-ListVérification 4 : collecte des logs diagnostics Autopilot
1# Collecte complète des logs MDM et Autopilot2# À exécuter depuis une session elevated sur l'appareil concerné3mdmdiagnosticstool.exe -area Autopilot;DeviceEnrollment;DeviceProvisioning -cab C:\Temp\AutopilotDiag.cab4 5# Extraction et recherche du code d'erreur6Expand-Archive -Path C:\Temp\AutopilotDiag.cab -DestinationPath C:\Temp\AutopilotLogs7Get-ChildItem C:\Temp\AutopilotLogs -Recurse -Include *.log, *.etl | ForEach-Object {8 Select-String -Path $_.FullName -Pattern "0x81036501|MDM URI|DeviceDiscovery" -ErrorAction SilentlyContinue9}Références techniques
- Microsoft Learn — mdmdiagnosticstool et collecte de logs MDM
- Microsoft Learn — mobileDeviceManagementPolicy resource type (Graph API)
- Microsoft Learn — Migrate from Azure AD Graph to Microsoft Graph
- Microsoft Learn — Windows Autopilot troubleshooting
- Microsoft Learn — dsregcmd reference
- Call4Cloud — Wrath of the 0x81036501 MDM Error (référence croisée sur l'historique de cette erreur)
Synthèse de l'incident
L'incident IT1420224 illustre un scénario d'échec particulièrement insidieux : aucun composant visible n'était défaillant. L'appareil était fonctionnel. Le tenant était correctement configuré. La licence Intune était présente. Le scope MDM était correct.
La défaillance résidait dans une omission lors d'une migration backend, sur une Scale Unit spécifique, dans un chemin de code responsable de la construction d'un unique claim dans un token JWT. Ce claim manquant a suffi à rendre l'enrollment Intune automatique impossible pour l'ensemble des tenants de l'ASU 0102.
Points clés à retenir
Pour les administrateurs Intune :
- En cas d'échec 0x81036501, vérifiez en priorité si l'incident est corrélé à une ASU spécifique via le Service Health Microsoft 365 Admin Center
dsregcmd /statuset la clé de registreCloudDomainJoin\TenantInfosont vos premiers indicateurs de l'état MDM côté appareil- Un appareil Entra Joined sans MDMUrl n'est PAS Intune Managed, même si la jonction Entra a réussi
Pour les ingénieurs cloud et architectes :
- Les migrations d'API qui impactent la construction de tokens d'identité nécessitent des tests de régression explicites sur les claims JWT
- Le modèle de données de Microsoft Graph et d'Azure AD Graph sont structurellement différents : une migration ne se résume pas à un changement d'endpoint
- La granularité ASU dans l'infrastructure Microsoft permet des rollouts progressifs, mais crée aussi des fenêtres d'incohérence entre tenants
Cet incident confirme également que la migration depuis Azure AD Graph vers Microsoft Graph, bien que techniquement justifiée, continue de générer des effets de bord non triviaux lorsqu'elle touche des chemins critiques d'infrastructure d'identité. La surveillance proactive du Service Health Microsoft 365 et la mise en place d'alertes sur les échecs d'enrollment Intune restent des pratiques essentielles pour tout environnement managé à grande échelle.



