Le problème est apparu avec des comptes de service on-premises, configurés avec une PSO Active Directory autorisant une validité de mot de passe étendue (1 an). Ces comptes étaient synchronisés vers Entra ID via Azure AD Connect, ce qui est une pratique courante pour des scripts, services ou tâches hybrides.
Côté Entra ID, en revanche, la politique de mot de passe par défaut impose une expiration à 90 jours. Contrairement à AD on-prem, il n’est pas possible d’appliquer une politique de mot de passe spécifique à un utilisateur ou un groupe sans impacter l’ensemble du tenant.
Résultat : le mot de passe reste parfaitement valide on-prem, mais Entra ID le considère comme expiré.
Les symptômes sont trompeurs :
- le compte n’est pas bloqué
- l’authentification on-prem fonctionne
- mais toute tentative d’accès cloud (M365, Graph, Exchange Online, SharePoint, etc.) échoue
Ce scénario devient critique lorsque le compte de service on-prem initie une connexion vers le cloud : scripts PowerShell, tâches planifiées, flux hybrides.., tout casse silencieusement à cause de l’expiration côté Entra ID.
Après analyse, le comportement est logique : Entra ID ne tient pas compte des PSO on-premises pour l’expiration du mot de passe. L’état du mot de passe est évalué selon les règles cloud, indépendamment de sa validité dans AD.
La solution consiste donc à désactiver explicitement l’expiration du mot de passe côté Entra ID pour ces comptes spécifiques. Cela se fait via Microsoft Graph en positionnant la propriété, passwordPolicies à DisablePasswordExpiration.
Commande PowerShell :
Update-MgUser -UserId $UserId -PasswordPolicies "DisablePasswordExpiration"
Cette configuration permet :
- de conserver une PSO stricte et contrôlée on-prem
- d’éviter toute expiration côté cloud
- de sécuriser les scénarios hybrides et automatisés
Cette approche doit évidemment rester limitée aux comptes de service et documentée clairement, mais elle s’avère indispensable dans de nombreux environnements hybrides réels.

