According to Verizon's 2026 Data Breach Investigations Report, credential abuse still shows up in 39% of breaches when you account for every stage of the attack chain, making it the single most common technique across the full breach life cycle. Active Directory (AD) password requirements are the rules that determine whether a user's chosen password is acceptable inside a Windows domain. They cover the length, history, age, complexity, lockout behavior, and reversible encryption. Misconfigured settings typically surface as a credential stuffing incident.
This guide covers every method a domain admin can use to read those settings: the Default Domain Policy, the Group Policy Management Console (GPMC), PowerShell, and Active Directory Administrative Center (ADAC) for fine-grained password policies (FGPPs). It also explains how ADSelfService Plus extends those rules with dictionary, pattern, and breach checks that the native tools do not perform.
AD enforces password requirements at two levels: The Default Domain Policy sets a baseline that applies to every domain-joined account, and FGPPs override that baseline for specific users or groups (which is useful when domain admins, service accounts, or other privileged roles need stricter controls than the rest of the domain). Both policy types control the same eight settings:
| Setting | Default value | Recommended value |
|---|---|---|
| Enforce password history | 24 passwords remembered | 24 passwords remembered |
| Maximum password age | 42 days | 90 days or no expiration with breach list screening |
| Minimum password age | 1 day | 1 day |
| Minimum password length | 7 characters | 14 characters |
| Minimum password length audit | Not set | Set to match the minimum length |
| Password must meet complexity requirements | Enabled | Enabled and paired with breach screening |
| Store passwords using reversible encryption | Disabled | Disabled |
| Relax minimum password length limits | Not configured | Not configured |
The Default Domain Policy applies these settings domain-wide. To enforce stricter rules for specific groups, domain admins, service accounts, and executives, use FGPPs as a per-group override.
Here's what Password must meet complexity requirements actually means:
This setting will not block Password123! because that string satisfies three categories. It has no awareness of keyboard walks, palindromes, or known breached password lists.
NIST SP 800-63B (referenced from SP 800-53 Ccontrol IA-5) takes a different position. The guidance recommends the following:
ADSelfService Plus helps enforce a compliance- and security-aligned policy that extends these native rules. The Password Policy Enforcer adds dictionary word blocking, pattern detection for sequential numbers and keyboard walks, palindrome detection, restrictions on using AD attributes within the password, and a compromised password check against known breach databases.
The GPMC is the visual route to viewing and editing the Default Domain Policy.
Changes apply domain-wide and take effect after Group Policy refreshes on each DC—90 minutes by default with a 30-minute offset. Run gpupdate /force on the target machine to apply the changes immediately.
A note on OU-linked GPOs
If your domain has multiple GPOs linked at different OUs, the password policy must still come from a GPO linked at the domain level. Linking a password policy GPO to an OU has no effect on domain user passwords. The only way to vary password rules below the domain root is through an FGPPs.
FGPPs let you enforce stricter rules for specific users or groups, such as longer passwords for domain admins or no expiration for service accounts, without affecting the rest of the domain. Each FGPP is stored as a Password Settings Object (PSO) and contains the same eight settings as the Default Domain Policy, plus two additional fields:
To view the FGPPs:
PSO limitations to be aware of
FGPPs add granularity, but they don't extend what AD's password engine can evaluate. Neither the Default Domain Policy nor a PSO can screen a candidate password against a breach corpus, block dictionary words, or reject keyboard walks or sequential patterns. Those checks require enforcement that runs at the moment the user enters a new password—something that neither the GPMC nor ADAC provides but that can be achieved with ADSelfService Plus.
Here is a quick guide to using PowerShell to check the AD password requirements.
To install the module in Windows Server 2012 R2 or later
Use this PowerShell script:
Install-WindowsFeature RSAT-AD-PowerShellTo install the module in Windows 10 (version 1809 and later) or Windows 11
Use this PowerShell script:
Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0To install the module in Windows 10 versions before 1809
From the Microsoft Download Center, download the RSAT package matching your Windows 10 version and architecture, then enable the Active Directory Domain Services (AD DS) tools via Control Panel > Programs > Turn Windows features on or off > Remote Server Administration Tools > Role Administration Tools > AD DS and AD LDS Tools.
To install the module in Windows 8.1 or below
Download RSAT for Windows 8.1 from the Microsoft Download Center, then enable it via Control Panel > Programs > Turn Windows features on or off > Remote Server Administration Tools > Role Administration Tools > AD DS and AD LDS Tools > Active Directory Module for Windows PowerShell.
To load the Active Directory module after installation
Use this PowerShell script:
Import-Module ActiveDirectoryTo get the eight values from the Default Domain Policy, use this PowerShell script:
Get-ADDefaultDomainPasswordPolicyHere is a sample of the output you will receive:
ComplexityEnabled : True
DistinguishedName : DC=corp,DC=example,DC=com
LockoutDuration : 00:30:00
LockoutObservationWindow : 00:30:00
LockoutThreshold : 5
MaxPasswordAge : 90.00:00:00
MinPasswordAge : 1.00:00:00
MinPasswordLength : 14
PasswordHistoryCount : 24
ReversibleEncryptionEnabled : False To get every PSO in the domain, use this PowerShell script:
Get-ADFineGrainedPasswordPolicy -Filter *Here is a sample of the output you will receive:
Name : AdminPSO
Precedence : 10
MinPasswordLength : 20
PasswordHistoryCount: 24
ComplexityEnabled : True
AppliesTo : {CN=Domain Admins,CN=Users,...} Get-ADUserResultantPasswordPolicy -Identity <username>This returns the effective policy for a named user after FGPP resolution. If the user is covered only by the Default Domain Policy, this cmdlet returns $null. That is expected behavior—run Get-ADDefaultDomainPasswordPolicy to confirm what policy they inherit.
Get-ADUserResultantPasswordPolicy -Identity jdoeQuick check tools beyond the GPMC
Account lockout settings
The lockout settings are located alongside the password policy under Account Policies. Three settings are relevant:
PSOs are effective but carry administrative overhead: schema-aware ACLs, per-PSO precedence calculations, and no OU inheritance. ADSelfService Plus provides the same targeting granularity with less complexity—policies can be set at the OU or group level from a single console, without PSO configuration or precedence management.
The native AD password policy is limited to length, history, age, complexity categories, lockout, and reversible encryption settings. It does not evaluate dictionary words, recognize palindromes, or reference breach data. Those gaps are where most weak password compromise originates.
ADSelfService Plus addresses this with the Password Policy Enforcer, an enforcement layer applied at every point where a password is created or changed. Where native policy reaches its limits, ADSelfService Plus adds:
These rules apply at the Windows Ctrl+Alt+Del change password screen, the ADUC console, the ADSelfService Plus web portal, and the mobile app, so users cannot bypass enforcement by switching to a different channel.
Multi-factor authentication (MFA) provides a complementary layer. ADSelfService Plus enforces MFA on self-service password reset, account unlock, and directory update flows as well as on Windows, macOS, and Linux logins via the Endpoint MFA add-on. Strong password rules reduce exposure from guessable credentials; MFA addresses stolen ones.
Where native AD reaches its limits, ADSelfService Plus picks up, with breach screening, pattern detection, dictionary filtering, and AD attribute restrictions applied at every point where a password is created or changed. Per-OU and per-group targeting gives you FGPP-level granularity without PSO configuration overhead.
NIST SP 800-63B moves away from the complexity rules most organizations are used to. The key requirements: a minimum eight characters, a maximum of at least 64 to support passphrases, mandatory screening against known breached password lists, and blocking dictionary words, repetitive strings, and context-specific passwords like those containing the username. Forced periodic rotation is explicitly discouraged unless there is evidence of compromise, and mandatory character type rules are not recommended. Native AD satisfies some of these requirements by default but has no mechanism for breach screening, dictionary blocking, or pattern rejection—those require a third-party enforcement layer.
Both are Windows security log events related to password activity in AD. Event ID 4723 is when a user attempts to change their own password; whether the attempt succeeds or fails, the account, domain, and originating workstation are logged. Event ID 4724 is when an administrator resets another user's password. Failed attempts for either ID typically mean the new password didn't meet policy requirements. Neither event is logged unless the audit policy is configured to track account management events; you can enable this under Advanced Audit Policy Configuration > Account Management > Audit User Account Management.
No. AD stores passwords as hashed values, and no built-in tool—ADUC, ADAC, or PowerShell—exposes them. The only exception is if Store passwords using reversible encryption is enabled; this stores passwords in a decryptable form and should never be on. Administrators can reset a password without knowing the current one, but that is not the same as retrieving it—the original credential is never exposed.