共用方式為


使用AD FS設定 Azure 虛擬桌面的單一登入

本文將逐步引導您完成針對 Azure 虛擬桌面設定 Active Directory 同盟服務 (AD FS) 單一登錄 (SSO) 的程式。

必要條件

設定 AD FS 單一登入之前,您必須在環境中執行下列設定:

  • 會話主機執行支援的 Windows 10 或 Windows 11 版本。

  • 您必須部署 Active Directory 憑證服務 (CA) 角色。 所有執行角色的伺服器都必須加入網域、安裝最新的 Windows 更新,並設定為 企業證書頒發機構單位

  • 您必須部署 Active Directory 同盟服務 (AD FS) 角色。 所有執行此角色的伺服器都必須加入網域、安裝最新的 Windows 更新,以及執行 Windows Server 2016 或更新版本。

  • 建議您設定 Web 應用程式 Proxy 角色,以保護您環境與 AD FS 伺服器的連線。 所有執行此角色的伺服器都必須安裝最新的 Windows 更新,並執行 Windows Server 2016 或更新版本。 請參閱此 Web 應用程式 Proxy 指南以開始設定此角色。

  • 您必須部署 Microsoft Entra Connect,以將使用者同步至 Microsoft Entra ID。 Microsoft Entra 必須在同盟模式中設定 Connect。

  • 在AD FS 伺服器上設定 Azure 虛擬桌面的PowerShell環境

注意事項

Microsoft Entra Domain Services 不支援此解決方案。 您必須使用 Active Directory 網域服務 域控制器。

支援的用戶端

下列 Azure 虛擬桌面用戶端支援這項功能:

設定證書頒發機構單位發行憑證

您必須正確建立下列憑證範本,AD FS 才能使用 SSO:

  • 首先,您必須建立 Exchange 註冊代理程式 (離線要求) 證書範本。 AD FS 會使用 Exchange 註冊代理程式證書範本代表使用者要求憑證。
  • 您也必須建立 智慧卡登入 證書範本,AD FS 會使用此範本來建立登入憑證。

建立這些證書範本之後,您必須在證書頒發機構單位上啟用範本,AD FS 才能提出要求。

注意事項

此解決方案會在每次使用者登入時產生新的短期憑證,如果您有許多使用者,可以填入證書頒發機構單位資料庫。 您可以 設定 CA 進行非持續性憑證處理,以避免資料庫多載。 如果您這樣做,請在重複的智慧卡登入憑證範本上,確定您只啟用 [不要在 CA 資料庫中儲存憑證和要求]。 請勿啟用 [不要在發行的憑證中包含撤銷資訊 ],否則設定將無法運作。

建立註冊代理程式證書範本

視您的環境而定,您可能已針對其他用途設定註冊代理程式證書範本,例如 Windows Hello 企業版、登入憑證或 VPN 憑證。 如果是,您必須修改它以支援 SSO。 如果沒有,您可以建立新的範本。

若要判斷您是否已經使用註冊代理程式證書範本,請在AD FS 伺服器上執行下列PowerShell命令,並查看是否傳回值。 如果是空的,請建立新的註冊代理程式證書範本。 否則,請記住名稱,並更新現有的註冊代理程式證書範本。

Import-Module adfs
(Get-AdfsCertificateAuthority).EnrollmentAgentCertificateTemplateName

若要建立新的註冊代理程式證書範本:

  1. 在證書頒發機構單位上,從 [開始] 功能表執行 mmc.exe ,以啟動 [Microsoft 管理控制台]

  2. 取 [檔案...]>新增/遠端嵌入式管理單元...>證書範>本加 >>請確定檢視證書範本清單。

  3. 展開 [ 證書範本],以滑鼠右鍵按兩下 [ Exchange 註冊代理程式 ([離線要求]) ,然後選取 [ 複製範本]

  4. 選取 [ 一般] 索引標籤,然後在 [ 範本顯示名稱 ] 字段中輸入 “ADFS 註冊代理程式”。 這會自動將範本名稱設定為 「ADFSEnrollmentAgent」。。

  5. 選取 [ 安全性] 索引標籤,然後選取 [ 新增...]

  6. 接下來,依序選取 [ 物件類型...] 和 [ 服務帳戶],然後選取 [ 確定]

  7. 輸入AD FS的服務帳戶名稱,然後選取 [ 確定]

    • 在隔離的 AD FS 設定中,服務帳戶會命名為 “adfssvc$”
    • 如果您使用 Microsoft Entra Connect 設定 AD FS,服務帳戶會命名為 “aadcsvc$”
  8. 新增服務帳戶並在 [安全性] 索引卷標中顯示之後,請在 [群組或使用者名稱] 窗格中選取它,然後在 [AD FS 服務帳戶的許可權] 窗格中選取 [允許註冊] 和 [自動註冊],然後選取 [確定] 儲存。

    螢幕快照,顯示正確設定註冊代理程式證書範本之後的安全性索引標籤。

若要更新現有的註冊代理程式證書範本:

  1. 在證書頒發機構單位上,從 [開始] 功能表執行 mmc.exe ,以啟動 [Microsoft 管理控制台]
  2. 取 [檔案...]>新增/遠端嵌入式管理單元...>證書範>本加 >>請確定檢視證書範本清單。
  3. 展開 [ 證書範本],按兩下對應至AD FS 伺服器上所設定範本的範本。 在 [ 一般 ] 索引標籤上,範本名稱應該符合您在上面找到的名稱。
  4. 選取 [ 安全性] 索引標籤,然後選取 [ 新增...]
  5. 接下來,依序選取 [ 物件類型...] 和 [ 服務帳戶],然後選取 [ 確定]
  6. 輸入AD FS的服務帳戶名稱,然後選取 [ 確定]
    • 在隔離的 AD FS 設定中,服務帳戶會命名為 “adfssvc$”
    • 如果您使用 Microsoft Entra Connect 設定 AD FS,服務帳戶會命名為 “aadcsvc$”
  7. 新增服務帳戶並在 [安全性] 索引卷標中顯示之後,請在 [群組或使用者名稱] 窗格中選取它,然後在 [AD FS 服務帳戶的許可權] 窗格中選取 [允許註冊] 和 [自動註冊],然後選取 [確定] 儲存。

建立智慧卡登入證書範本

若要建立智慧卡登入證書範本:

  1. 在證書頒發機構單位上,從 [開始] 功能表執行 mmc.exe ,以啟動 [Microsoft 管理控制台]

  2. 取 [檔案...]>新增/遠端嵌入式管理單元...>證書範>本>請確定檢視證書範本清單。

  3. 展開 [ 證書範本],以滑鼠右鍵按兩下 [ 智慧卡登入] ,然後選取 [ 複製範本]

  4. 選取 [ 一般] 索引標籤,然後在 [ 範本顯示名稱 ] 字段中輸入 “ADFS SSO”。 這會自動將範本名稱設定為 「ADFSSSO」。

    注意事項

    由於此憑證是隨選要求的,因此建議將有效期間縮短為8小時,並將更新期間縮短為1小時。

  5. 選取 [ 主體名稱] 索引 標籤,然後在要求中選取 [ 提供]。 當您看到警告訊息時,請選取 [ 確定]

    螢幕快照,顯示 SSO 證書範本的 [主體名稱] 索引標籤,以及正確設定時應該的樣子。

  6. 選取 [ 發行需求] 索引 標籤。

  7. 取 [授權簽章的數目] ,然後輸入 值 1

    螢幕快照,顯示 SSO 證書範本的 [發行需求] 索引標籤,以及正確設定時應該的樣子。

  8. 針對 [應用程式原則],選取 [ 憑證要求代理程式]

  9. 選取 [ 安全性] 索引標籤,然後選取 [ 新增...]

  10. 選取 [物件類型...]、[ 服務帳戶] 和 [ 確定]

  11. 輸入AD FS的服務帳戶名稱,就像您在 建立註冊代理程式證書範本 一節中所做的一樣。

    • 在隔離的 AD FS 設定中,服務帳戶會命名為 “adfssvc$”
    • 如果您使用 Microsoft Entra Connect 設定 AD FS,服務帳戶會命名為 “aadcsvc$”
  12. 新增服務帳戶並在 [ 安全 性] 索引卷標中顯示之後,在 [ 群組或使用者名稱 ] 窗格中選取它,選取 [ 允許 同時註冊] 和 [自動註冊],然後選取 [ 確定 ] 儲存。

螢幕快照,顯示 SSO 證書範本在正確設定之後的安全性索引標籤。

開啟新的憑證樣本:

若要開啟新的憑證範本:

  1. 在證書頒發機構單位上,從 [開始] 功能表執行 mmc.exe ,以啟動 [Microsoft 管理控制台]

  2. 取 [檔案...]>新增/移除嵌入式管理單元...>證書頒發機構單位>加 >>完成> 和 [確定] 檢視證書頒發機構單位。

  3. 展開左側窗格上的 [證書頒發機構單位],然後開啟 [ 證書範本]

  4. 以滑鼠右鍵按下顯示證書範本清單的中間窗格,選取 [ 新增],然後選取 [要發出的證書範本]

  5. 選取 [ADFS 註冊代理程式 ] 和 [ADFS SSO],然後選取 [ 確定]。 您應該會在中間窗格中看到這兩個範本。

    顯示可發行之證書範本清單的螢幕快照,包括新的 ADFS 註冊代理程式和 ADFS SSO。

    注意事項

    如果您已經設定註冊代理程式證書範本,則只需要新增 ADFS SSO 範本。

設定AD FS 伺服器

您必須將 #D0BDBD176706B41309D4F1B849CBD85F6 (AD FS) 伺服器設定為使用新的證書範本,並設定信賴憑證者信任以支援 SSO。

AD FS 伺服器與 Azure 虛擬桌面服務之間的信賴憑證信任,可讓單一登錄憑證要求正確轉送至您的網域環境。

設定 AD FS 單一登入時,您必須選擇共用金鑰或憑證:

  • 如果您有單一 AD FS 伺服器,您可以選擇共用金鑰或憑證。
  • 如果您有多個 AD FS 伺服器,則必須選擇憑證。

用來產生令牌以登入 Windows 的共用金鑰或憑證必須安全地儲存在 Azure 金鑰保存庫 中。 您可以將秘密儲存在現有的 金鑰保存庫 或部署新的密碼。 在任一情況下,您都必須確保設定正確的存取原則,讓 Azure 虛擬桌面服務可以存取它。

使用憑證時,您可以使用任何一般用途的憑證,而且不需要使用主體名稱或主體別名 (SAN) 。 雖然並非必要,但建議您建立由有效證書頒發機構單位發行的憑證。 此憑證可以直接在 Azure 金鑰保存庫 中建立,而且需要有可導出的私鑰。 公鑰可以匯出,並使用下列腳本來設定 AD FS 伺服器。 請注意,此憑證與必須具有適當主體名稱和有效證書頒發機構單位的AD FS SSL 憑證不同。

PowerShell 資源庫 中提供的PowerShell腳本 ConfigureWVDSSO.ps1 會設定信賴憑證者信任的AD FS伺服器,並視需要安裝憑證。

此腳本只有一個必要的參數 ADFSAuthority,這是解析為 AD FS 並使用 “/adfs” 作為後綴的 URL。 例如,https://adfs.contoso.com/adfs

  1. 在AD FS VM上,執行下列 PowerShell Cmdlet,以設定 AD FS 使用上一節中的證書範本:

    Set-AdfsCertificateAuthority -EnrollmentAgentCertificateTemplate "ADFSEnrollmentAgent" -LogonCertificateTemplate "ADFSSSO" -EnrollmentAgent
    

    注意事項

    如果您已經設定 EnrollmentAgentCertificateTemplate,請確定您使用現有的範本名稱,而不是 ADFSEnrollmentAgent。

  2. 執行 ConfigureWVDSSO.ps1 腳本。

    注意事項

    您需要 $config 變數值才能完成指示的下一個部分,因此請勿關閉您用來完成先前指示的PowerShell視窗。 您可以繼續使用相同的 PowerShell 視窗,或在啟動新的 PowerShell 工作階段時保持開啟。

    • 如果您在 金鑰保存庫 中使用共用金鑰,請在 AD FS 伺服器上執行下列 PowerShell Cmdlet,並以完整的 URL 取代 ADFSServiceUrl,以觸達您的 AD FS 服務:

      Install-Script ConfigureWVDSSO
      $config = ConfigureWVDSSO.ps1 -ADFSAuthority "<ADFSServiceUrl>" [-WvdWebAppAppIDUri "<WVD Web App URI>"] [-RdWebURL "<RDWeb URL>"]
      

      注意事項

      您需要 WvdWebAppAppIDUri 和 RdWebURL 屬性,才能在主權雲端中設定環境,例如 Azure Government。 在 Azure 商業雲端中,這些屬性會分別自動設定為 https://www.wvd.microsoft.comhttps://rdweb.wvd.microsoft.com

    • 如果您在 金鑰保存庫 中使用憑證,請在 AD FS 伺服器上執行下列 PowerShell Cmdlet,並以完整的 URL 取代 ADFSServiceUrl,以觸達您的 AD FS 服務:

      Install-Script ConfigureWVDSSO
      $config = ConfigureWVDSSO.ps1 -ADFSAuthority "<ADFSServiceUrl>" -UseCert -CertPath "<Path to the pfx file>" -CertPassword <Password to the pfx file> [-WvdWebAppAppIDUri "<WVD Web App URI>"] [-RdWebURL "<RDWeb URL>"]
      

      注意事項

      您需要 WvdWebAppAppIDUri 和 RdWebURL 屬性,才能在主權雲端中設定環境,例如 Azure Government。 在 Azure 商業雲端中,這些屬性會分別自動設定為 https://www.wvd.microsoft.comhttps://rdweb.wvd.microsoft.com

  3. 執行下列 PowerShell Cmdlet,在 Azure 金鑰保存庫 上設定存取原則:

    Set-AzKeyVaultAccessPolicy -VaultName "<Key Vault Name>" -ServicePrincipalName 9cdead84-a844-4324-93f2-b2e6bb768d07 -PermissionsToSecrets get -PermissionsToKeys sign
    
  4. 將共用金鑰或憑證儲存在 Azure 金鑰保存庫 中,其中包含允許使用秘密的以逗號分隔的訂用帳戶標識碼清單。

    • 如果您在 金鑰保存庫 中使用共用金鑰,請執行下列 PowerShell Cmdlet 來儲存共用金鑰並設定標籤:

      $hp = Get-AzWvdHostPool -Name "<Host Pool Name>" -ResourceGroupName "<Host Pool Resource Group Name>" 
      $secret = Set-AzKeyVaultSecret -VaultName "<Key Vault Name>" -Name "adfsssosecret" -SecretValue (ConvertTo-SecureString -String $config.SSOClientSecret  -AsPlainText -Force) -Tag @{ 'AllowedWVDSubscriptions' = $hp.Id.Split('/')[2]}
      
    • 如果您的憑證已在 金鑰保存庫 中,請執行下列 PowerShell Cmdlet 來設定標籤:

      $hp = Get-AzWvdHostPool -Name "<Host Pool Name>" -ResourceGroupName "<Host Pool Resource Group Name>"
      $secret = Update-AzKeyVaultCertificate -VaultName "<Key Vault Name>" -Name "<Certificate Name>" -Tag @{ 'AllowedWVDSubscriptions' = $hp.Id.Split('/')[2]} -PassThru
      
    • 如果您有本機憑證,請執行下列 PowerShell Cmdlet 以匯入 金鑰保存庫 中的憑證,並設定 標籤:

      $hp = Get-AzWvdHostPool -Name "<Host Pool Name>" -ResourceGroupName "<Host Pool Resource Group Name>" 
      $secret = Import-AzKeyVaultCertificate -VaultName "<Key Vault Name>" -Name "adfsssosecret" -Tag @{ 'AllowedWVDSubscriptions' = $hp.Id.Split('/')[2]} -FilePath "<Path to pfx>" -Password (ConvertTo-SecureString -String "<pfx password>"  -AsPlainText -Force)
      

注意事項

您可以藉由變更 AD FS 單一登入設定,選擇性地設定提示使用者輸入認證的頻率。 根據預設,系統會在未註冊的裝置上每隔 8 小時提示使用者一次。

設定 Azure 虛擬桌面主機集區

是時候在 Azure 虛擬桌面主機集區上設定 AD FS SSO 參數了。 若要這樣做,如果您尚未設定 Azure 虛擬桌面的 PowerShell 環境 ,請連線到您的帳戶。

之後,在 AD FS VM 的相同 PowerShell 視窗中執行下列兩個 Cmdlet 的其中一個,以更新主機集區的 SSO 資訊:

  • 如果您在 金鑰保存庫 中使用共用金鑰,請執行下列 PowerShell Cmdlet:

    Update-AzWvdHostPool -Name "<Host Pool Name>" -ResourceGroupName "<Host Pool Resource Group Name>" -SsoadfsAuthority "<ADFSServiceUrl>" -SsoClientId "<WVD Web App URI>" -SsoSecretType SharedKeyInKeyVault -SsoClientSecretKeyVaultPath $secret.Id
    

    注意事項

    您必須設定 SsoClientId 屬性,以符合您要部署 SSO 的 Azure 雲端。 在 Azure 商業雲端中,此屬性應設定為 https://www.wvd.microsoft.com。 不過,此屬性的必要設定與其他雲端不同,例如 Azure Government 雲端。

  • 如果您在 金鑰保存庫 中使用憑證,請執行下列 PowerShell Cmdlet:

    Update-AzWvdHostPool -Name "<Host Pool Name>" -ResourceGroupName "<Host Pool Resource Group Name>" -SsoadfsAuthority "<ADFSServiceUrl>" -SsoClientId "<WVD Web App URI>" -SsoSecretType CertificateInKeyVault -SsoClientSecretKeyVaultPath $secret.Id
    

    注意事項

    您必須設定 SsoClientId 屬性,以符合您要部署 SSO 的 Azure 雲端。 在 Azure 商業雲端中,此屬性應設定為 https://www.wvd.microsoft.com。 不過,此屬性的必要設定與其他雲端不同,例如 Azure Government 雲端。

設定其他主機集區

當您需要設定其他主機集區時,可以擷取您用來設定現有主機集區的設定,以設定新的主機集區。

若要從現有的主機集區擷取設定,請開啟 PowerShell 視窗並執行此 Cmdlet:

Get-AzWvdHostPool -Name "<Host Pool Name>" -ResourceGroupName "<Host Pool Resource Group Name>" | fl *

您可以依照步驟,使用相同的 SsoClientIdSsoClientSecretKeyVaultPathSsoSecretTypeSsoadfsAuthority 值來設定 Azure 虛擬桌面主機集區。

拿掉 SSO

若要停用主機集區上的 SSO,請執行下列 Cmdlet:

Update-AzWvdHostPool -Name "<Host Pool Name>" -ResourceGroupName "<Host Pool Resource Group Name>" -SsoadfsAuthority ''

如果您也想要在 AD FS 伺服器上停用 SSO,請執行此 Cmdlet:

Install-Script UnConfigureWVDSSO
UnConfigureWVDSSO.ps1 -WvdWebAppAppIDUri "<WVD Web App URI>" -WvdClientAppApplicationID "a85cf173-4192-42f8-81fa-777a763e6e2c"

注意事項

WvdWebAppAppIDUri 屬性必須符合您要部署的 Azure 雲端。 在 Azure 商業雲端中,此屬性為 https://www.wvd.microsoft.com。 對於其他雲端而言會有所不同,例如 Azure Government 雲端。

後續步驟

現在您已設定單一登錄,您可以登入支援的 Azure 虛擬桌面用戶端,以在使用者工作階段中進行測試。 如果您想要瞭解如何使用新的認證連線到工作階段,請參閱下列文章: