共用方式為


AD FS 中的複合驗證和 AD DS 宣告

Windows Server 2012 透過引進複合驗證來增強 Kerberos 驗證。 複合驗證可讓 Kerberos 票證授權服務 (TGS) 要求包含兩個身分識別:

  • 使用者的身分識別
  • 使用者裝置的身分識別。

Windows 藉由擴充 Kerberos 彈性驗證安全通道 (FAST),或 Kerberos 防護來完成複合驗證。

AD FS 2012 和更新版本允許取用位於 Kerberos 驗證票證中的 AD DS 發出的使用者或裝置宣告。 在舊版 AD FS 中,宣告引擎只能從 Kerberos 讀取使用者和群組安全性群組識別碼 (SID),卻無法讀取 Kerberos 票證中包含的任何宣告資訊。

您可以搭配 Active Directory 同盟服務 (AD FS) 使用 Active Directory 網域服務 (AD DS) 發出的使用者和裝置宣告,為同盟應用程式啟用更豐富的存取控制。

需求

  1. 存取同盟應用程式的電腦,必須使用 Windows 整合式驗證向 AD FS 進行驗證。

    • 只有在連線到後端 AD FS 伺服器時,才能使用 Windows 整合式驗證。
    • 電腦必須能夠連線到同盟服務名稱的後端 AD FS 伺服器
    • AD FS 伺服器必須在其內部網路設定中提供 Windows 整合式驗證作為主要驗證方法。
  2. Kerberos 用戶端對宣告複合驗證和 Kerberos 防護的支援原則必須套用至存取同盟應用程式 (受複合驗證保護) 的所有電腦。 這適用於單一樹系或跨樹系案例。

  3. 包含 AD FS 伺服器的網域必須將對宣告複合驗證和 Kerberos 防護的 KDC 支援原則設定套用至網域控制站。

在 Windows Server 2012 R2 中設定 AD FS 的步驟

使用下列步驟來設定複合驗證和宣告

步驟 1:在預設網域控制站原則中啟用宣告的 KDC 支援、複合驗證和 Kerberos 防護

  1. 在 [伺服器管理員] 中,選取 [工具],[群組原則管理]
  2. 瀏覽至[預設網域控制站原則],以滑鼠右鍵按一下並選取[編輯]Screenshot showing the Default Domain Policy page in the Group Policy Management dialog box.
  3. [群組原則管理編輯器][電腦設定]下,展開[原則][系統管理範本][系統],然後選取 [KDC]
  4. 按兩下[對宣告、複合驗證和 Kerberos 防護的 KDC 支援]Screenshot of the Group Policy Management Editor showing the KDC support for claims, compound authentication, and Kerberos armoring setting highlighted.
  5. 在新的對話方塊視窗中,將宣告的 KDC 支援設定為[啟用]
  6. 從下拉式功能表中的 [選項] 下方選取[支援],然後按一下[套用][確定]Screenshot of the KDC support for claims, compound authentication and Kerberos armoring dialog box showing the Supported option selected.

步驟 2:在存取同盟應用程式的電腦上啟用對宣告、複合驗證和 Kerberos 防護的 Kerberos 用戶端支援

  1. 在套用至存取同盟應用程式的電腦的群組原則上,於[群組原則管理編輯器][電腦設定]下方,展開[原則][系統管理範本][系統],然後選取 Kerberos
  2. 在 [群組原則管理編輯器] 視窗的右窗格中,按兩下 [Kerberos 用戶端對宣告、複合驗證和 Kerberos 防護的支援]
  3. 在新的對話方塊視窗中,將 Kerberos 用戶端支援設定為[已啟用],然後按一下[套用][確定]Screenshot of the KDC support for claims, compound authentication and Kerberos armoring dialog box showing the Enabled option selected.
  4. 關閉 [群組原則管理編輯器]。

步驟 3:確認 AD FS 伺服器已更新。

您必須確認 AD FS 伺服器上已安裝下列更新。

更新 描述
KB2919355 累積安全性更新 (包括 KB2919355、KB2932046、KB2934018、KB2937592、KB2938439)
KB2959977 Server 2012 R2 的更新
Hotfix 3052122 此更新會在 Active Directory 同盟服務中新增複合識別碼宣告的支援。

步驟 4:設定主要驗證提供者

  1. 將主要驗證提供者設定為 AD FS 內部網路設定的 Windows 驗證

  2. 在 [AD FS 管理] 的 [驗證原則]下,選取[主要驗證],然後在[全域設定]下方,按一下[編輯]

  3. [內部網路]下方的[編輯全域驗證原則]中選取 [Windows 驗證]

  4. 按一下[套用],然後按一下[確定]

    Screenshot of the Edit Global Authentication Policy dialog box showing the Windows Authentication option selected.

  5. 使用 PowerShell 時,您可以使用 Set-AdfsGlobalAuthenticationPolicy Cmdlet。

Set-AdfsGlobalAuthenticationPolicy -PrimaryIntranetAuthenticationProvider 'WindowsAuthentication'

注意

在 WID 型伺服器陣列中,必須在主要 AD FS 伺服器上執行 PowerShell 命令。 在 SQL 型伺服器陣列中,PowerShell 命令可以在屬於伺服器陣列成員的任何 AD FS 伺服器上執行。

步驟 5:將宣告描述新增至 AD FS

  1. 將下列宣告描述新增至伺服器陣列。 AD FS 2012 R2 中預設沒有此宣告描述,而且必須手動新增。

  2. 在 [AD FS 管理] 中,以滑鼠右鍵按一下[服務]下方的[宣告描述],然後選取[新增宣告描述]

  3. 在宣告描述中輸入下列資訊

    • 顯示名稱:「Windows 裝置群組」
    • 宣告描述:'<https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsdevicegroup>' `
  4. 將勾選記號放在這兩個方塊中。

  5. 按一下 [確定]

    Screenshot of the Add a Claim Description dialog box.

  6. 使用 PowerShell 時,您可以使用Add-AdfsClaimDescription Cmdlet。

    Add-AdfsClaimDescription -Name 'Windows device group' -ClaimType 'https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsdevicegroup' `
    -ShortName 'windowsdevicegroup' -IsAccepted $true -IsOffered $true -IsRequired $false -Notes 'The windows group SID of the device'
    

注意

在 WID 型伺服器陣列中,必須在主要 AD FS 伺服器上執行 PowerShell 命令。 在 SQL 型伺服器陣列中,PowerShell 命令可以在屬於伺服器陣列成員的任何 AD FS 伺服器上執行。

步驟 6:啟用 msDS-SupportedEncryptionTypes 屬性中的複合驗證位元

  1. 使用 Set-ADServiceAccount PowerShell Cmdlet,在您指定執行 AD FS 服務的帳戶上,啟用 msDS-SupportedEncryptionTypes 屬性的複合驗證位元。

注意

如果您變更服務帳戶,則必須執行 Set-ADUser -compoundIdentitySupported:$true Windows PowerShell Cmdlet,手動啟用複合驗證。

Set-ADServiceAccount -Identity “ADFS Service Account” -CompoundIdentitySupported:$true
  1. 重新啟動 AD FS 服務。

注意

當「CompoundIdentitySupported」設定為 true 之後,在新伺服器上安裝相同的 gMSA (2012R2/2016) 會失敗,且出現下列錯誤 – Install-ADServiceAccount:無法安裝服務帳戶。錯誤訊息:「提供的內容與目標不符。」

解決方案:暫時將 CompoundIdentitySupported 設定為 $false。 此步驟會導致 AD FS 停止發出 WindowsDeviceGroup 宣告。 Set-ADServiceAccount -Identity 'ADFS Service Account' -CompoundIdentitySupported:$false 會在新伺服器上安裝 gMSA,然後將 CompoundIdentitySupported 啟用回 $True。 停用 CompoundIdentitySupported,這樣重新啟用就不需要重新啟動 AD FS 服務了。

步驟 7:更新 Active Directory 的 AD FS 宣告提供者信任

  1. 更新 Active Directory 的 AD FS 宣告提供者信任,以包含下列適用於「WindowsDeviceGroup」宣告的「傳遞」宣告規則。
  2. [AD FS 管理]中,按一下[宣告提供者信任],然後在右窗格中,以滑鼠右鍵按一下 Active Directory,然後選取[編輯宣告規則]
  3. [編輯 Active Director 的宣告規則]按一下[新增規則]
  4. [新增轉換宣告規則精靈]中選取[傳遞或篩選傳入宣告],然後按一下[下一步]
  5. 新增顯示名稱,然後從[傳入宣告類型]下拉式清單中選取[Windows 裝置群組]
  6. 按一下完成。 按一下[套用],然後按一下[確定]Screenshot of the AD FS, Edit Claim Rules for Active Directory, and Edit Rule - Windows Device Group dialog boxes with arrows and call outs showing the workflow described above.

步驟 8:在預期 WindowsDeviceGroup 宣告的 [信賴憑證者] 中新增類似的「傳遞」或「轉換」宣告規則。

  1. AD FS 管理中,按一下[信賴憑證者信任],然後在右窗格中,以滑鼠右鍵按一下您的 RP,然後選取[編輯宣告規則]
  2. [發行轉換規則]上按一下[新增規則]
  3. [新增轉換宣告規則精靈]中選取[傳遞或篩選傳入宣告],然後按一下[下一步]
  4. 新增顯示名稱,然後從[傳入宣告類型]下拉式清單中選取[Windows 裝置群組]
  5. 按一下完成。 按一下[套用],然後按一下[確定]Screenshot of the AD FS, Edit Claim Rules for myclaims.fedhome.in, and Edit Rule - Windows Device Grp dialog boxes with arrows and call outs showing the workflow described above.

在 Windows Server 2016 中設定 AD FS 的步驟

以下將詳細說明在 Windows Server 2016 的 AD FS 上設定複合驗證的步驟。

步驟 1:在預設網域控制站原則中啟用宣告的 KDC 支援、複合驗證和 Kerberos 防護

  1. 在 [伺服器管理員] 中,選取 [工具],[群組原則管理]
  2. 瀏覽至[預設網域控制站原則],以滑鼠右鍵按一下並選取[編輯]
  3. [群組原則管理編輯器][電腦設定]下,展開[原則][系統管理範本][系統],然後選取 [KDC]
  4. 按兩下[對宣告、複合驗證和 Kerberos 防護的 KDC 支援]
  5. 在新的對話方塊視窗中,將宣告的 KDC 支援設定為[啟用]
  6. 從下拉式功能表中的 [選項] 下方選取[支援],然後按一下[套用][確定]

步驟 2:在存取同盟應用程式的電腦上啟用對宣告、複合驗證和 Kerberos 防護的 Kerberos 用戶端支援

  1. 在套用至存取同盟應用程式的電腦的群組原則上,於[群組原則管理編輯器][電腦設定]下方,展開[原則][系統管理範本][系統],然後選取 Kerberos
  2. 在 [群組原則管理編輯器] 視窗的右窗格中,按兩下 [Kerberos 用戶端對宣告、複合驗證和 Kerberos 防護的支援]
  3. 在新的對話方塊視窗中,將 Kerberos 用戶端支援設定為[已啟用],然後按一下[套用][確定]
  4. 關閉 [群組原則管理編輯器]。

步驟 3:設定主要驗證提供者

  1. 將主要驗證提供者設定為 AD FS 內部網路設定的 Windows 驗證
  2. 在 [AD FS 管理] 的 [驗證原則]下,選取[主要驗證],然後在[全域設定]下方,按一下[編輯]
  3. [內部網路]下方的[編輯全域驗證原則]中選取 [Windows 驗證]
  4. 按一下[套用],然後按一下[確定]
  5. 使用 PowerShell 時,您可以使用 Set-AdfsGlobalAuthenticationPolicy Cmdlet。
Set-AdfsGlobalAuthenticationPolicy -PrimaryIntranetAuthenticationProvider 'WindowsAuthentication'

注意

在 WID 型伺服器陣列中,必須在主要 AD FS 伺服器上執行 PowerShell 命令。 在 SQL 型伺服器陣列中,PowerShell 命令可以在屬於伺服器陣列成員的任何 AD FS 伺服器上執行。

步驟 4:啟用 msDS-SupportedEncryptionTypes 屬性中的複合驗證位元

  1. 使用 Set-ADServiceAccount PowerShell Cmdlet,在您指定執行 AD FS 服務的帳戶上,啟用 msDS-SupportedEncryptionTypes 屬性的複合驗證位元。

注意

如果您變更服務帳戶,則必須執行 Set-ADUser -compoundIdentitySupported:$true Windows PowerShell Cmdlet,手動啟用複合驗證。

Set-ADServiceAccount -Identity “ADFS Service Account” -CompoundIdentitySupported:$true
  1. 重新啟動 AD FS 服務。

注意

當「CompoundIdentitySupported」設定為 true 之後,在新伺服器上安裝相同的 gMSA (2012R2/2016) 會失敗,且出現下列錯誤 – Install-ADServiceAccount:無法安裝服務帳戶。錯誤訊息:「提供的內容與目標不符。」

解決方案:暫時將 CompoundIdentitySupported 設定為 $false。 此步驟會導致 AD FS 停止發出 WindowsDeviceGroup 宣告。 Set-ADServiceAccount -Identity 'ADFS Service Account' -CompoundIdentitySupported:$false 會在新伺服器上安裝 gMSA,然後將 CompoundIdentitySupported 啟用回 $True。 停用 CompoundIdentitySupported,這樣重新啟用就不需要重新啟動 AD FS 服務了。

步驟 5:更新 Active Directory 的 AD FS 宣告提供者信任

  1. 更新 Active Directory 的 AD FS 宣告提供者信任,以包含下列適用於「WindowsDeviceGroup」宣告的「傳遞」宣告規則。
  2. [AD FS 管理]中,按一下[宣告提供者信任],然後在右窗格中,以滑鼠右鍵按一下 Active Directory,然後選取[編輯宣告規則]
  3. [編輯 Active Director 的宣告規則]按一下[新增規則]
  4. [新增轉換宣告規則精靈]中選取[傳遞或篩選傳入宣告],然後按一下[下一步]
  5. 新增顯示名稱,然後從[傳入宣告類型]下拉式清單中選取[Windows 裝置群組]
  6. 按一下完成。 按一下[套用],然後按一下[確定]

步驟 6:在預期 WindowsDeviceGroup 宣告的 [信賴憑證者] 中新增類似「傳遞」或「轉換」宣告規則。

  1. AD FS 管理中,按一下[信賴憑證者信任],然後在右窗格中,以滑鼠右鍵按一下您的 RP,然後選取[編輯宣告規則]
  2. [發行轉換規則]上按一下[新增規則]
  3. [新增轉換宣告規則精靈]中選取[傳遞或篩選傳入宣告],然後按一下[下一步]
  4. 新增顯示名稱,然後從[傳入宣告類型]下拉式清單中選取[Windows 裝置群組]
  5. 按一下完成。 按一下[套用],然後按一下[確定]

驗證

若要驗證 WindowsDeviceGroup 宣告的版本,請使用 .Net 4.6 建立測試宣告感知應用程式。 使用 WIF SDK 4.0。 將應用程式設定為 AD FS 中的信賴憑證者,並使用上述步驟中指定的宣告規則予以更新。 使用 AD FS 的 Windows 整合式驗證提供者向應用程式進行驗證時,會建立下列宣告。 Validation

電腦/裝置的宣告現在可能會用於更豐富的存取控制。

例如–下列 AdditionalAuthenticationRules 告訴 AD FS:如果驗證使用者不是安全性群組「-1-5-21-2134745077-1211275016-3050530490-1117」的成員,而且電腦 (用於驗證使用者) 不是安全性群組「S-1-5-21-2134745077-1211275016-3050530490-1115 (WindowsDeviceGroup)」的成員,則叫用 MFA

不過,如果符合上述任何條件,請勿叫用 MFA。

'NOT EXISTS([Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsdevicegroup", Value =~ "S-1-5-21-2134745077-1211275016-3050530490-1115"])
&& NOT EXISTS([Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value =~ "S-1-5-21-2134745077-1211275016-3050530490-1117"])
=> issue(Type = "https://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", Value = "https://schemas.microsoft.com/claims/multipleauthn");'