共用方式為


使用 Microsoft Entra Connect 同步來實作密碼雜湊同步

本文提供您所需資訊,以讓您將使用者密碼從內部部署 Active Directory 執行個體同步處理至雲端式 Microsoft Entra 執行個體。

密碼雜湊同步處理如何運作

Active Directory 網域服務是以使用者實際密碼的雜湊值表示法格式來儲存密碼。 雜湊值是單向數學函式 (「雜湊演算法」) 的計算結果。 沒有方法可將單向函式的結果還原為密碼的純文本版本。

為了同步密碼,Microsoft Entra Connect 同步處理會從內部部署 Active Directory 執行個體擷取您的密碼雜湊。 額外的安全性處理會套用至密碼哈希,再同步處理至 Microsoft Entra 驗證服務。 密碼是以個別使用者為單位,依時間先後順序進行同步處理。

實際的密碼雜湊同步程序資料流程,與使用者資料的同步處理相似。 不過,密碼的同步處理頻率會高於其他屬性的標準目錄同步作業時程。 密碼雜湊同步流程每 2 分鐘就會執行一次。 您無法修改此程式的頻率。 當您同步處理密碼時,該密碼會覆寫現有的雲端密碼。

您第一次啟用密碼雜湊同步功能時,系統會對範圍內的所有使用者執行密碼的首次同步處理作業。 分段推出可讓您選擇性地對使用者群組測試雲端驗證功能,例如 Microsoft Entra 多重要素驗證、條件式存取、認證外洩的身分識別保護、身分識別控管等,然後再切換網域。 您無法明確定義您想要同步處理的使用者密碼子集。 不過,如果有多個連接器,您可以使用 Set-ADSyncAADPasswordSyncConfiguration Cmdlet 來停用某些連接器的密碼哈希同步,但無法停用其他連接器的密碼哈希同步處理。

當您變更內部部署密碼時,系統一般會在幾分鐘內同步更新後的密碼。 密碼雜湊同步功能會自動重試失敗的同步處理作業。 如果在嘗試同步處理密碼時發生錯誤,錯誤會記錄在您的事件檢視器中。

密碼同步處理不會影響目前已登入的使用者。 您目前的雲端服務會話不會立即受到同步處理的密碼變更所影響,當您登入雲端服務時發生。 不過,當雲端服務要求您重新驗證時,就需要提供新的密碼。

無論使用者是否登入公司網路,都必須再次輸入其公司認證,以驗證 Microsoft Entra ID。 不過,如果使用者在登入時選取 [讓我保持登入 (KMSI)] 核取方塊,則此模式可最小化。 選取此方塊會設定在 180 天內略過驗證的工作階段 Cookie。 KMSI 行為可以由 Microsoft Entra 管理員啟用或停用。 此外,您可以藉由設定 Microsoft Entra 聯結Microsoft Entra 混合式聯結來減少密碼提示,此功能會在使用者是位於連線到您公司網路的公司裝置上時,自動將他們登入。

更多優點

  • 一般而言,密碼雜湊同步處理比同盟服務更容易實作。 它不需要更多伺服器,而且不需要依賴高可用性同盟服務來驗證使用者。
  • 您也可以除了同盟之外,再啟用密碼雜湊同步處理。 您可以將它作為同盟服務發生中斷時的後援服務。

注意

只有 Active Directory 的物件類型使用者才支援密碼同步。 iNetOrgPerson 物件類型不支援它。

密碼雜湊同步處理運作方式的詳細描述

以下各節深入說明 Active Directory 與 Microsoft Entra ID 之間的密碼雜湊同步處理運作方式。

詳細的密碼流程

  1. AD Connect 伺服器上的密碼雜湊同步處理代理程式每隔兩分鐘就會向 DC 要求儲存的密碼雜湊 (unicodePwd 屬性)。 此要求是使用標準 MS-DRSR \(英文\)複寫通訊協定,用來在 DC 之間同步資料。 AD DS 連接器帳戶必須具有複寫目錄變更和複寫目錄變更所有 AD 許可權(預設在安裝時授與)才能取得密碼哈希。

  2. 在傳送之前,DC 會使用金鑰 (它是 RPC 工作階段金鑰和 salt 的 MD5 雜湊),來加密 MD4 密碼雜湊。 然後它會透過 RPC 將結果傳送給密碼雜湊同步處理代理程式。 DC 也會使用 DC 複寫通訊協定將 salt 傳遞至同步處理代理程式,讓代理程式能夠解密信封。

  3. 在密碼雜湊同步處理代理程式將信封加密後,它會使用 MD5CryptoServiceProvider 和 salt 來產生金鑰,以將接收的資料解密回其原始 MD4 格式。 密碼雜湊同步處理代理程式永遠不會存取純文字密碼。 密碼哈希同步處理代理程式的 MD5 使用嚴格是為了與 DC 的復寫通訊協定相容性,而且只會在 DC 與密碼哈希同步代理程式之間使用內部部署。

  4. 密碼雜湊同步處理代理程式會將 16 位元組二進位密碼雜湊擴展成 64 位元組,方法是先將該雜湊轉換成 32 位元組十六進位字串,再將此字串轉換回具有 UTF-16 編碼的二進位檔。

  5. 密碼雜湊同步處理代理程式會將每位使用者 salt 處理 (由 10 位元組長度 salt 所組成) 新增至 64 位元組二進位檔,以進一步保護原始雜湊。

  6. 接著,密碼雜湊同步處理代理程式會結合 MD4 雜湊加上每位使用者 salt 處理,然後將其輸入至 PBKDF2 函式。 使用 HMAC-SHA256 索引鍵哈希演算法的 1,000 個反覆專案。 如需詳細資訊,請參閱 Microsoft Entra 白皮書

  7. 密碼雜湊同步處理代理程式會使用產生的 32 位元組雜湊,將每位使用者 salt 處理和 SHA256 反覆運算數與其串連 (以供 Microsoft Entra ID 使用),然後透過 TLS 將字串從 Microsoft Entra Connect 傳輸至 Microsoft Entra ID。

  8. 當使用者嘗試登入 Microsoft Entra ID 並且輸入其密碼時,密碼會執行相同的 MD4+salt+PBKDF2+HMAC-SHA256 流程。 如果產生的哈希符合儲存在 Microsoft Entra ID 中的哈希,則表示使用者輸入正確的密碼並經過驗證。

注意

原始 MD4 哈希不會傳輸至 Microsoft Entra 識別碼。 而是會傳輸原始 MD4 雜湊的 SHA256 雜湊。 因此,如果取得儲存在 Microsoft Entra 識別碼中的哈希,就無法在內部部署傳遞哈希攻擊中使用。

注意

密碼雜湊值永遠不會儲存在 SQL 中。 這些值只會先在記憶體中處理,再傳送至 Microsoft Entra ID。

安全性考量

同步處理密碼時,密碼的純文本版本不會公開至密碼哈希同步處理功能、Microsoft Entra ID 或任何相關聯的服務。

使用者驗證是針對 Microsoft Entra 進行,而不是針對組織自己的 Active Directory 執行個體進行。 儲存在 Microsoft Entra ID 中的 SHA256 密碼資料 (原始 MD4 雜湊的雜湊),比儲存在 Active Directory 中的資料更安全。 此外,由於無法解密此 SHA256 哈希,因此無法回到組織的 Active Directory 環境,並在傳遞哈希攻擊中顯示為有效的用戶密碼。

密碼原則考量

啟用密碼雜湊同步處理會影響兩種類型的密碼原則:

  • 密碼複雜性原則
  • 密碼到期原則

密碼複雜性原則

啟用密碼雜湊同步處理時,內部部署 Active Directory 執行個體中的密碼複雜性原則,會覆寫所同步處理使用者在雲端中的複雜性原則。 您可以使用內部部署 Active Directory 執行個體的所有有效密碼,來存取 Microsoft Entra 服務。

注意

直接在雲端建立的使用者的密碼仍受制於在雲端定義的密碼原則。

密碼到期原則

依預設,如果使用者位於密碼雜湊同步處理範圍內,則雲端帳戶的密碼會設定成永不到期

您可以使用內部部署環境中已過期的同步處理密碼,繼續登入雲端服務。 您的雲端密碼會於下一次您在內部部署環境中變更密碼時更新。

CloudPasswordPolicyForPasswordSyncedUsersEnabled

如果有只會與 Microsot Entra 整合服務互動的已同步處理使用者,而且也必須遵循密碼到期原則,您可以啟用 CloudPasswordPolicyForPasswordSyncedUsersEnabled功能 (在遭取代的 MSOnline PowerShell 模組中,稱為 EnforceCloudPasswordPolicyForPasswordSyncedUsers),強制其遵循您的 Microsoft Entra 密碼到期原則。

CloudPasswordPolicyForPasswordSyncedUsersEnabled 停用時(這是預設設定),Microsoft Entra Connect 會將同步處理使用者的 PasswordPolicies 屬性更新為 “DisablePasswordExpiration”。 每次同步處理用戶的密碼時,都會完成此更新,並指示Microsoft Entra ID 忽略該使用者的雲端密碼到期原則。 您可以使用 Microsoft Graph PowerShell 模組並搭配下列命令,檢查屬性的值:

(Get-MgUser -UserId <User Object ID> -Property PasswordPolicies).PasswordPolicies

若要啟用 CloudPasswordPolicyForPasswordSyncedUsersEnabled 功能,請使用 Graph PowerShell 模組執行下列命令:

$OnPremSync = Get-MgDirectoryOnPremiseSynchronization
$OnPremSync.Features.CloudPasswordPolicyForPasswordSyncedUsersEnabled = $true

Update-MgDirectoryOnPremiseSynchronization `
  -OnPremisesDirectorySynchronizationId $OnPremSync.Id `
  -Features $OnPremSync.Features 

注意

您必須安裝 MSGraph PowerShell 模組,才能讓前述指令碼運作。 如果您收到與許可權不足相關的任何錯誤,請確定您已在連線 Connect-MgGraph -Scopes "OnPremDirectorySynchronization.ReadWrite.All" 時使用下列命令,正確同意 API 範圍

啟用之後,Microsoft Entra ID 不會移至每個同步處理的使用者,以從 PasswordPolicies 屬性中移除 DisablePasswordExpiration 該值。 相反地,在每位使用者的下一個密碼雜湊同步處理期間,會從 PasswordPolicies 中移除 DisablePasswordExpiration 值,其會在內部部署 AD 中的下一個密碼變更時移除。

啟用 CloudPasswordPolicyForPasswordSyncedUsersEnabled 功能之後,就會佈建不具 PasswordPolicies 值的新使用者。

提示

建議您先啟用 CloudPasswordPolicyForPasswordSyncedUsersEnabled,再啟用密碼哈希同步處理,讓密碼哈希的初始同步處理不會將值新增DisablePasswordExpiration至使用者的 PasswordPolicies 屬性。

預設的 Microsoft Entra 密碼原則會要求使用者每隔 90 天變更其密碼。 如果您在 AD 中的原則也是 90 天,則這兩個原則應該相符。 不過,如果 AD 原則不是 90 天,您可以使用 Update-MgDomain PowerShell 命令來更新 Microsoft Entra 密碼原則以符合。

Microsoft Entra ID 針對每個已註冊的網域,支援不同的密碼到期原則。

注意:如果有同步處理的帳戶需要在 Microsoft Entra ID 中具有非執行密碼,您必須在 entra ID 中明確將值新增 DisablePasswordExpiration 至 user 物件的 PasswordPolicies 屬性,Microsoft Entra ID。 您可以執行下列命令來新增此值:

Update-MgUser -UserID <User Object ID> -PasswordPolicies "DisablePasswordExpiration"`

注意

針對 PasswordPolicies 值設定為 DisablePasswordExpiration 的混合式使用者,此值會在內部部署執行密碼變更之後切換至 None

注意

Update-MgDomain PowerShell 命令無法在同盟網域上運作。

注意

Update-MgUser PowerShell 命令無法在同盟網域上運作。

同步處理暫時密碼和「下次登入時強制變更密碼」

通常強制使用者在第一次登入期間變更其密碼,尤其是在發生系統管理員密碼重設之後。 它通常稱為設定「暫時」密碼,並藉由檢查 Active Directory (AD) 中用戶物件上的 [用戶必須在下次登入時變更密碼] 旗標來完成。

暫時的密碼功能可協助確保在第一次使用時,已完成認證的擁有權轉移,並將多人知道的認證持續時間降至最低。

若要支援同步使用者Microsoft Entra ID 中的暫時密碼,您可以使用 Graph PowerShell 模組執行下列命令來啟用 ForcePasswordChangeOnLogOn 功能:

$OnPremSync = Get-MgDirectoryOnPremiseSynchronization
$OnPremSync.Features.UserForcePasswordChangeOnLogonEnabled = $true

Update-MgDirectoryOnPremiseSynchronization `
  -OnPremisesDirectorySynchronizationId $OnPremSync.Id `
  -Features $OnPremSync.Features 

注意

強制使用者在下次登入變更其密碼時,需要同時進行密碼變更。 Microsoft Entra Connect 不會自行挑選強制密碼變更旗標;這是密碼哈希同步處理期間偵測到的密碼變更的補充。

如果使用者在 Active Directory (AD) 中設定 [密碼永不過期] 選項,則將不會在 Active Directory (AD) 中設定強制密碼變更旗標,因此使用者在下一次登入期間不會收到變更密碼提示。

不論 ForcePasswordChangeOnLogOn 功能為 true 或 false,Active Directory 中以「使用者必須在下次登入時變更密碼」旗標建立的新使用者,一律會在 Microsoft Entra ID 中佈建,且其密碼原則為「強制下次登入時必須變更密碼」。 這是 Microsoft Entra 內部邏輯,因為佈建新使用者時未包含密碼,而 ForcePasswordChangeOnLogOn 功能只會影響管理員密碼重設案例。

如果在 Active Directory 中建立使用者,並在啟用此功能之前設為「使用者必須在下次登入時變更密碼」,使用者就會在登入時收到錯誤。 若要補救此問題,請在 Active Directory 使用者和電腦中取消核取並重新檢查 [使用者必須在下次登入時變更密碼] 欄位。 同步處理使用者物件變更之後,使用者會在 Microsoft Entra ID 中收到預期的提示,要求其更新密碼。

警告

只有在租用戶上啟用 SSPR 和密碼回寫時,才可使用這項功能。 如此一來,如果使用者透過 SSPR 變更密碼,則會同步處理至 Active Directory。

帳戶到期

如果您的組織使用 accountExpires 屬性作為用戶帳戶管理的一部分,則此屬性不會同步處理至Microsoft Entra ID。 如此一來,在針對密碼雜湊同步處理設定之環境中已到期的 Active Directory 帳戶在 Microsoft Entra ID 裡將仍然為作用中。 在使用者的 AD 帳戶到期之後,建議您使用已排程的 PowerShell 指令碼將其停用 (使用 Set-ADUser Cmdlet)。 相反地,在從 AD 帳戶移除到期期間,應該重新啟用帳戶。

覆寫已同步的密碼

除非使用者位於同盟網域中,否則管理員可以使用 PowerShell 直接在 Microsoft Entra ID 中手動重設密碼。

在此情況下,新的密碼會覆寫您已同步處理的密碼,且雲端中定義的所有密碼原則都會套用到新的密碼。

如果您再次變更內部部署密碼,則新密碼會同步到雲端並覆寫手動更新的密碼。

密碼同步處理不會影響已登入的 Azure 使用者。 您目前的雲端服務會話不會立即受到登入雲端服務時所發生的同步密碼變更所影響。 KMSI 會延伸此差異的持續時間。 當雲端服務要求您重新驗證時,就需要提供新的密碼。

密碼雜湊同步處理至 Microsoft Entra Domain Services

如果您使用 Microsoft Entra Domain Services 為需要使用 Kerberos、LDAP 或 NTLM 的應用程式和服務提供舊版驗證,則某些額外的進程是密碼哈希同步流程的一部分。 Microsoft Entra Connect 會使用下列程式,將密碼哈希同步處理至 Microsoft Entra ID,以用於 Microsoft Entra Domain Services:

重要

只應針對與內部部署 AD DS 環境進行同步處理時,才安裝和設定 Microsoft Entra Connect。 其不支援在 Microsoft Entra Domain Services 受控網域中安裝 Microsoft Entra Connect,將物件同步處理回 Microsoft Entra ID。

當您為 Microsoft Entra 租用戶啟用 Microsoft Entra Domain Services 時,Microsoft Entra Connect 只會同步處理舊版密碼雜湊。 如果您只使用 Microsoft Entra Connect 同步內部部署 AD DS 環境與 Microsoft Entra ID,則不會使用以下步驟。

如果您的舊版應用程式未使用 NTLM 驗證或 LDAP 簡單繫結,建議您針對 Microsoft Entra Domain Services 停用 NTLM 密碼雜湊同步處理。 如需更多資訊,請參閱停用弱式加密套件和 NTLM 認證雜湊同步處理

  1. Microsoft Entra Connect 會擷取租用戶 Microsoft Entra Domain Services 執行個體的公開金鑰。
  2. 當使用者變更其密碼時,內部部署網域控制站會將密碼變更的結果 (雜湊) 儲存在兩個屬性中:
    • NTLM 密碼雜湊的 unicodePwd
    • Kerberos 密碼雜湊的 supplementalCredentials
  3. Microsoft Entra Connect 透過目錄複寫通道,偵測密碼變更 (需要複寫至其他網域控制站的屬性變更)。
  4. 對於密碼變更的每個使用者,Microsoft Entra Connect 會執行下列步驟:
    • 產生隨機 AES 256 位元對稱金鑰。
    • 產生第一輪加密所需的隨機初始化向量。
    • supplementalCredentials 屬性中,擷取 Kerberos 密碼雜湊。
    • 檢查 Microsoft Entra Domain Services 安全性設定 SyncNtlmPasswords 設定。
      • 如果停用此設定,則會產生隨機的高熵 NTLM 雜湊 (與使用者的密碼不同)。 然後,此雜湊會與 supplementalCrendetials 屬性中準確的 Kerberos 密碼雜湊合併成一個資料結構。
      • 啟用時,會將 unicodePwd 屬性的值與 supplementalCredentials 屬性中的已擷取 Kerberos 密碼雜湊,合併成一個資料結構。
    • 使用 AES 對稱金鑰,加密單一資料結構。
    • 使用租用戶的 Microsoft Entra Domain Services 公開金鑰,加密 AES 對稱金鑰。
  5. Microsoft Entra Connect 會傳輸加密的 AES 對稱金鑰、包含密碼雜湊的加密資料結構,以及初始化向量至 Microsoft Entra ID。
  6. Microsoft Entra ID 會儲存加密的 AES 對稱金鑰、加密的資料結構,以及使用者的初始化向量。
  7. Microsoft Entra ID 會使用內部同步處理機制,將加密的 AES 對稱金鑰、加密的資料結構,以及初始化向量推送至 Microsoft Entra Domain Services 的加密 HTTP 工作階段。
  8. Microsoft Entra Domain Services 會從 Azure Key Vault 擷取租用戶執行個體的私密金鑰。
  9. 針對每一組加密的資料 (代表單一使用者的密碼變更),Microsoft Entra Domain Services 之後會執行下列步驟:
    • 使用其私密金鑰解密 AES 對稱金鑰。
    • 使用 AES 對稱金鑰,並搭配初始化向量,解密包含密碼雜湊的加密資料結構。
    • 將收到的 Kerberos 密碼雜湊寫入 Microsoft Entra Domain Services 網域控制站。 雜湊會儲存至使用者物件的 supplementalCredentials 屬性,該屬性會加密 Microsoft Entra Domain Services 網域控制站的公開金鑰。
    • Microsoft Entra Domain Services 會將收到的 NTLM 密碼雜湊寫入 Microsoft Entra Domain Services 網域控制站中。 雜湊會儲存至使用者物件的 unicodePwd 屬性,該屬性會加密 Microsoft Entra Domain Services 網域控制站的公開金鑰。

啟用密碼雜湊同步功能

重要

如果您要從 AD FS(或其他同盟技術)移轉至密碼哈希同步處理,請檢視 將應用程式遷移至Microsoft Entra ID 的資源。

當您透過 [快速設定] 選項安裝 Microsoft Entra Connect 時,就會自動啟用密碼雜湊同步功能。 如需詳細資訊,請參閱使用快速設定開始使用 Microsoft Entra Connect

若安裝 Microsoft Entra Connect 時使用自訂設定,您就能在使用者登入頁面上使用密碼雜湊同步功能。 如需詳細資訊,請參閱 Microsoft Entra Connect 自訂安裝

啟用密碼雜湊同步處理

密碼雜湊同步處理和 FIPS

如果您的伺服器根據聯邦資訊處理標準 (FIPS) 鎖定,則會停用 MD5。

若要啟用密碼雜湊同步功能的 MD5,請執行下列步驟:

  1. 移至 %programfiles%\Microsoft Azure AD Sync\Bin。
  2. 開啟 [Server.exe.config]。
  3. 前往檔案結尾處的 [設定/執行階段] 節點。
  4. 新增下列節點:<enforceFIPSPolicy enabled="false" />
  5. 儲存您的變更。
  6. 重新啟動,以讓變更生效。

做為參考,此片段應如下列所示:

    <configuration>
        <runtime>
            <enforceFIPSPolicy enabled="false" />
        </runtime>
    </configuration>

如需安全性和 FIPS 的詳細資訊,請參閱 Microsoft Entra 密碼雜湊同步、加密和 FIPS 合規性

針對密碼雜湊同步處理進行疑難排解

如果您在進行密碼雜湊同步處理時發生問題,請參閱針對密碼雜湊同步處理進行疑難排解

下一步