密码是可用的最不安全的身份验证方法之一。 它们容易受到各种威胁的攻击,包括网络钓鱼、凭据填充、暴力攻击和社会工程。 若要在 Microsoft Entra ID 中实现无密码身份验证的好处,必须确保密码不再作为租户中的登录选项提供。
密码争用可确保用户无法使用密码进行身份验证。 它强制他们使用更安全的无密码凭据,例如 Windows Hello 企业版、FIDO2 安全密钥或 Microsoft Authenticator。 本文提供了有关如何为从本地 Active Directory 域服务(AD DS)同步的混合用户和Microsoft Entra ID中的云用户加密密码的指导。
先决条件
- Microsoft Entra Connect 同步 版本 2.4.18.0 或更高版本
从本地 AD DS 同步的混合用户帐户的争用密码
将用户从本地 AD DS 同步到 Microsoft Entra ID 的组织应在本地环境中加密用户密码,因为本地环境是同步用户帐户及其密码的权限源。 如果你的组织使用 云身份验证 并将密码哈希同步到 Microsoft Entra ID,则这些乱码密码也会同步到云。 同步过程可确保用户在本地或云中不知道其密码,防止用户使用并促使用户使用更安全的无密码凭据。
选项 1:使用交互式登录所需的智能卡对本地用户密码进行争用 (SCRIL)
建议在本地环境中使用交互式登录所需的智能卡(SCRIL)设置来加密用户密码,因为这是 AD DS 中本地可用的选项。 在用户对象上启用 SCRIL 时,用户的 AD DS 密码由域控制器随机化为无人知道的值。 用户必须注册,然后必须使用智能卡或 Windows Hello 企业版向 AD DS 域进行身份验证。 启用密码哈希同步后,此 AD DS 密码哈希也会与 Microsoft Entra ID 同步。
可以使用 Active Directory 用户和计算机工具配置交互式登录设置所需的智能卡。 以下示例 PowerShell 脚本可用于以编程方式启用设置,包括一次为许多用户启用设置。 修改脚本的 samAccountName 变量以匹配环境,然后在 PowerShell 会话中运行它。 在本地 AD 中使用具有适当权限的管理员帐户的凭据。
$samAccountName = <sAMAccountName of the user>
Import-Module ActiveDirectory
Set-ADUser -Identity $samAccountName -SmartcardLogonRequired $true
选项 2:使用脚本化随机值对本地用户密码进行混淆
如果不想使用交互式登录所需的智能卡(SCRIL),则另一种方法是使用脚本对密码进行争用。 如果用户需要恢复其密码以访问旧版应用,请使用脚本来拼拼密码。 定期运行脚本,以争用用户重置回已知状态的任何密码。
以下示例 PowerShell 脚本生成 64 个字符的随机密码,并将其设置为针对本地 AD DS 域的变量名称 $samAccountName 中指定的用户。 修改脚本 $samAccountName 变量以匹配环境,然后在 PowerShell 会话中运行它。 在本地 AD DS 中使用具有适当权限的管理员帐户的凭据。
$samAccountName = <sAMAccountName of the user>
Import-Module ActiveDirectory
function Generate-RandomPassword{
[CmdletBinding()]
param (
[int]$Length = 64
)
$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+[]{};:,.<>/?\|`~"
$random = New-Object System.Random
$password = ""
for ($i = 0; $i -lt $Length; $i++) {
$index = $random.Next(0, $chars.Length)
$password += $chars[$index]
}
return $password
}
Import-Module ActiveDirectory
$NewPassword = ConvertTo-SecureString -String (Generate-RandomPassword) -AsPlainText -Force
Set-ADAccountPassword -Identity $samAccountName -NewPassword $NewPassword -Reset
注意
一定要从安全受信任的环境中执行脚本,并确保脚本未被记录日志。 将脚本执行的主机视为特权主机,并给予与域控制器相同的安全级别。
在 Microsoft Entra ID 中随机化云用户帐户的密码
基于云的无密码用户应将其密码设置为随机值。 随机化密码可防止用户知道密码并使用密码进行身份验证。 (可选)如果最终用户遇到需要密码的应用程序,组织可以允许其重置其密码。 定期运行脚本,以混淆用户重置的密码并恢复到已知状态。
以下示例 PowerShell 脚本生成 64 个字符的随机密码,并将其设置为变量名为 $userId 的用户,在 Microsoft Entra ID 中应用。 修改脚本 的$userId 变量以匹配环境,然后在 PowerShell 会话中运行它。 当系统提示对Microsoft Entra ID进行身份验证时,请使用与可重置密码角色相关联的帐户凭据。
$userId = "<UPN of the user>"
function Generate-RandomPassword{
[CmdletBinding()]
param (
[int]$Length = 64
)
$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+[]{};:,.<>/?\|`~"
$random = New-Object System.Random
$password = ""
for ($i = 0; $i -lt $Length; $i++) {
$index = $random.Next(0, $chars.Length)
$password += $chars[$index]
}
return $password
}
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
Install-Module Microsoft.Graph -Scope CurrentUser
Import-Module Microsoft.Graph.Users.Actions
Connect-MgGraph -Scopes "UserAuthenticationMethod.ReadWrite.All" -NoWelcome
$passwordParams = @{
UserId = $userId
AuthenticationMethodId = "28c10230-6103-485e-b985-444c60001490"
NewPassword = Generate-RandomPassword
}
Reset-MgUserAuthenticationMethodPassword @passwordParams
注意
请仅在安全且受信环境中执行脚本,并确保该脚本未被记录。 将执行脚本的主机视为特权主机,并给予与域控制器相同的安全级别。
有关完全强制实施防钓鱼身份验证的组织的更多注意事项
如果组织不再需要密码,因为所有应用程序和方案都与无密码凭据兼容,则你可能不再需要为用户提供自助密码恢复选项。 请考虑禁用允许用户绕过已混淆密码并重新获得密码访问权限的工具。
- 禁用自助密码重置(SSPR)工具,包括 Microsoft Entra 自助密码重置。
- 禁用从 Microsoft Entra 到本地 Active Directory 的密码写回。
- 将 Microsoft Entra 密码策略设置为 未过期。