$OnPremSync = Get-MgDirectoryOnPremiseSynchronization
$OnPremSync.Features.CloudPasswordPolicyForPasswordSyncedUsersEnabled = $true
Update-MgDirectoryOnPremiseSynchronization `
-OnPremisesDirectorySynchronizationId $OnPremSync.Id `
-Features $OnPremSync.Features
启用后,Azure AD 不会从每个已同步用户的 PasswordPolicies 属性中删除 DisablePasswordExpiration
值。 每个用户下次在本地 AD 中更改密码时,会在密码哈希同步期间从 PasswordPolicies 中删除 DisablePasswordExpiration
值。
启用 CloudPasswordPolicyForPasswordSyncedUsersEnabled 功能后,无需 PasswordPolicies 值即可预配新用户。
建议在启用密码哈希同步之前启用 CloudPasswordPolicyForPasswordSyncedUsersEnabled,以便密码哈希的初始同步不会将 DisablePasswordExpiration
值添加到用户的 PasswordPolicies 属性。
默认的 Azure AD 密码策略要求用户每隔 90 天更改其密码。 如果 AD 中的策略也是 90 天,则这两个策略应该匹配。 但是,如果 AD 策略不是 90 天,则可以使用 Update-MgDomain PowerShell 命令(之前是:Set-MsolPasswordPolicy)更新要匹配的 Azure AD 密码策略。
Azure AD 支持为每个已注册的域单独设置密码过期策略。
注意事项:如果需要在 Azure AD 中对某些已同步的帐户使用密码不过期策略,则必须将 DisablePasswordExpiration
值显式添加到 Azure AD 中用户对象的 PasswordPolicies 属性。 为此可以运行以下命令。
Update-MgUser -UserID <User Object ID> -PasswordPolicies "DisablePasswordExpiration"
对于将 PasswordPolicies 值设置为 DisablePasswordExpiration
的混合用户,此值会在本地执行密码更改后切换为 None
。
Update-MgDomain 和已弃用的 Set-MsolPasswordPolicy PowerShell 命令均不适用于联合域。
Set-MgUser 和已弃用的 Set-AzureADUser PowerShell 命令均不适用于联合域。
同步临时密码和“下次登录时强制更改密码”
典型的做法强制用户在首次登录时更改其密码,尤其是在管理员密码重置发生后。 这种做法通常称为设置“临时”密码,并通过选中Active Directory(AD)中用户对象上的“用户下次登录时必须更改密码”标志来完成。
临时密码功能有助于确保首次使用凭据时完成其所有权转移,以最大程度地减少多个人员知道该凭据的持续时间。
若要在 Azure AD 中支持同步用户的临时密码,可以通过在 Azure AD Connect 服务器上运行以下命令来启用 ForcePasswordChangeOnLogOn 功能:
Set-ADSyncAADCompanyFeature -ForcePasswordChangeOnLogOn $true
如果强制用户在下次登录时更改其密码,则同时也需要执行密码更改操作。 Azure AD Connect 本身不会选取强制密码更改标志;它是对密码哈希同步期间检测到的密码更改的补充。
如果用户在 Active Directory (AD) 中设置了“密码永不过期”选项,则不会在 Active Directory (AD) 中设置强制密码更改标志,因此在用户下次登录时,系统不会提示用户更改密码。
在 Azure AD 中,将始终使用密码策略“下次登录时强制更改密码”来预配在 Active Directory 中创建的带有“用户下次登录时必须更改密码”标志的新用户,而无论 ForcePasswordChangeOnLogOn 功能为 true 或 false。 这是一个 Azure AD 内部逻辑,因为新用户是在没有密码的情况下预配的,而 ForcePasswordChangeOnLogOn 功能仅影响管理员密码重置方案。
如果在启用该功能之前,在 Active Directory 中创建了“用户下次登录时必须更改密码”的用户,则用户在登录时将收到错误。 若要修正此问题,请在 Active Directory 用户和计算机中取消检查并重新检查字段“用户下次登录时必须更改密码”。 同步用户对象更改后,用户将收到 Azure AD 中预期更新其密码的提示。
仅当在租户上启用了 SSPR 和密码写回时,才应使用此功能。 这样,如果用户通过 SSPR 更改其密码,该密码将同步到 Active Directory。
如果组织在用户帐户管理中使用了 accountExpires 属性,此属性不会同步到 Azure AD。 因此,环境中为密码哈希同步配置的过期 Active Directory 帐户仍会在 Azure AD 中处于活动状态。 建议使用计划的 PowerShell 脚本,该脚本在用户的 AD 帐户过期后禁用它们(使用 Set-ADUser cmdlet)。 相反,在从 AD 帐户中删除过期的过程中,应重新启用该帐户。
覆盖已同步的密码
管理员可以使用 Windows PowerShell 直接在 Azure AD 中手动重置密码(除非用户位于联合域中)。
在这种情况下,新密码会覆盖已同步密码,并且在云中定义的所有密码策略都会应用于新的密码。
如果再次更改本地密码,新密码则会同步到云,并会手动覆盖更新的密码。
同步密码对登录的 Azure 用户没有任何影响。 当前的云服务会话不会立即受到登录到云服务时发生的已同步密码更改的影响。 KMSI 会延长此差异的持续时间。 当云服务要求再次身份验证时,需要提供新的密码。
Azure AD 域服务的密码哈希同步过程
如果使用 Azure AD 域服务为需要使用 Kerberos、LDAP 或 NTLM 的应用程序和服务提供旧式身份验证,则密码哈希同步流需要包含一些额外的流程。 Azure AD Connect 使用以下额外的过程将密码哈希同步到 Azure AD 以便在 Azure AD 域服务中使用:
安装和配置的 Azure AD Connect 应仅用于与本地 AD DS 环境同步。 不支持在 Azure AD DS 托管域中安装 Azure AD Connect 以将对象同步回 Azure AD。
仅当你为 Azure AD 租户启用了 Azure AD DS 时,Azure AD Connect 才会同步旧式密码哈希。 如果仅使用 Azure AD Connect 将本地 AD DS 环境与 Azure AD 同步,则不会使用以下步骤。
如果旧式应用程序不使用 NTLM 身份验证或 LDAP 简单绑定,则建议你为 Azure AD DS 禁用 NTLM 密码哈希同步。 有关详细信息,请参阅禁用弱密码套件和 NTLM 凭据哈希同步。
Azure AD Connect 检索租户的 Azure AD 域服务实例的公钥。
当用户更改其密码时,本地域控制器将密码更改的结果(哈希)存储在两个属性中:
- unicodePwd,用于 NTLM 密码哈希。
- supplementalCredentials,用于 Kerberos 密码哈希。
- Azure AD Connect 通过目录复制通道来检测密码更改(需要复制到其他域控制器的属性更改)。
- 对于其密码发生更改的每个用户,Azure AD Connect 执行以下步骤:
- 生成随机的 AES 256 位对称密钥。
- 生成第一轮加密所需的随机初始化向量。
- 从 supplementalCredentials 属性中提取 Kerberos 密码哈希。
- 检查 Azure AD 域服务安全配置 SyncNtlmPasswords 设置。
- 如果禁用此设置,则生成随机的高熵 NTLM 哈希(不同于用户的密码)。 然后,将此哈希与从 supplementalCrendetials 属性提取的 Kerberos 密码哈希合并到一个数据结构中。
- 如果启用,则会将 unicodePwd 属性的值与从 supplementalCredentials 属性提取的 Kerberos 密码哈希合并到一个数据结构中。
- 使用 AES 对称密钥加密单一数据结构。
- 使用租户的 Azure AD 域服务公钥对 AES 对称密钥进行加密。
- Azure AD Connect 会向 Azure AD 传输加密的 AES 对称密钥、包含密码哈希的已加密数据结构,以及初始化向量。
- Azure AD 存储加密的 AES 对称密钥、加密的数据结构和用户的初始化向量。
- Azure AD 使用基于加密的 HTTP 会话的内部同步机制,将加密的 AES 对称密钥、加密的数据结构以及初始化向量推送到 Azure AD 域服务。
- Azure AD 域服务从 Azure 密钥保管库中检索租户的实例的私钥。
- 然后,对于每个加密的数据集(表示单个用户的密码更改),Azure AD 域服务执行以下步骤:
- 使用其私钥对 AES 对称密钥进行解密。
- 使用带有初始化向量的 AES 对称密钥来解密包含密码哈希的已加密数据结构。
- 将它接收到的 Kerberos 密码哈希写入 Azure AD 域服务域控制器。 哈希将保存到用户对象的 supplementalCredentials 属性,该属性加密为 Azure AD 域服务域控制器的公钥。
- Azure AD 域服务将它接收到的 NTLM 密码哈希写入到 Azure AD 域服务域控制器。 哈希将保存到用户对象的 unicodePwd 属性,该属性加密为 Azure AD 域服务域控制器的公钥。
启用密码哈希同步
如果要从 AD FS(或其他联合技术)迁移到密码哈希同步,请查看用于将应用程序迁移到 Azure AD 的资源。
使用“快速设置”选项安装 Azure AD Connect 时,会自动启用密码哈希同步。 有关详细信息,请参阅通过快速设置开始使用 Azure AD Connect。
如果在安装 Azure AD Connect 时使用了自定义设置,则可在用户登录页上使用密码哈希同步。 有关详细信息,请参阅 Azure AD Connect 的自定义安装。
密码哈希同步和 FIPS
如果已经根据美国联邦信息处理标准 (FIPS) 锁定服务器,则会禁用 MD5。
若要为密码哈希同步启用 MD5,请执行以下步骤:
- 转到 %programfiles%\Microsoft Azure AD Sync\Bin。
- 打开 miiserver.exe.config。
- 转到文件末尾的 configuration/runtime 节点。
- 添加以下节点:
<enforceFIPSPolicy enabled="false"/>
- 保存所做更改。
- 重启以使这些更改生效。
下面显示了此代码片段的大致情况,供参考:
<configuration>
<runtime>
<enforceFIPSPolicy enabled="false"/>
</runtime>
</configuration>
有关安全性与 FIPS 的信息,请参阅 Azure AD password hash sync, encryption, and FIPS compliance(Azure AD 密码哈希同步、加密和 FIPS 符合性)。
排查密码哈希同步问题
如果遇到密码哈希同步问题,请参阅排查密码哈希同步问题。
- Azure AD Connect 同步:自定义同步选项
- 将本地标识与 Azure Active Directory 集成
- 用于将应用程序迁移到 Azure AD 的资源