使用 AD FS 設定 Azure 虛擬桌面的單一登入
本文將逐步引導您完成設定 Azure 虛擬桌面 Active Directory 同盟服務 (AD FS) 單一登入 (SSO) 的程序。
注意
Azure 虛擬桌面 (傳統) 不支援此功能。
必要條件
設定 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 Domain Services 網域控制站。
支援的用戶端
下列 Azure 虛擬桌面用戶端支援此功能:
設定憑證授權單位以發行憑證
您必須正確建立下列憑證範本,AD FS 才能使用 SSO:
- 首先,您必須建立 Exchange 註冊代理程式 (離線要求) 憑證範本。 AD FS 會使用 Exchange 註冊代理程式憑證範本來代表使用者要求憑證。
- 您也需要建立智慧卡登入憑證範本,AD FS 將使用該範本來建立登入憑證。
建立這些憑證範本之後,您必須在憑證授權單位上將其啟用,AD FS 才能要求範本。
注意
此解決方案會在每次使用者登入時產生新的短期憑證,如果您有許多使用者,就可能會填滿憑證授權單位資料庫。 您可以設定 CA 進行非永續性憑證處理來避免資料庫超載。 如果您這樣做,請在重複的智慧卡登入憑證範本上,確定您只啟用 [Do not store certificates and requests in the CA database] \(不要在 CA 資料庫中儲存憑證和要求\)。 請勿啟用 [Do not include revocation information in issued certificates] \(不要在發行的憑證中包含撤銷資訊\),否則設定將無法運作。
建立註冊代理程式憑證範本
根據您的環境,您可能已設定註冊代理程式憑證範本進行其他用途,例如 Windows Hello 企業版、登入憑證或 VPN 憑證。 如果是,則必須進行修改以支援 SSO。 如果不是,則可以建立新的範本。
若要判斷您是否已在使用註冊代理程式憑證範本,請在 AD FS 伺服器上執行下列 PowerShell 命令,並查看是否傳回值。 如果值是空的,請建立新的註冊代理程式憑證範本。 否則,請記住名稱並更新現有的註冊代理程式憑證範本。
Import-Module adfs
(Get-AdfsCertificateAuthority).EnrollmentAgentCertificateTemplateName
若要建立新的註冊代理程式憑證範本:
在憑證授權單位上,從 [開始] 功能表執行 mmc.exe,以啟動 Microsoft Management Console。
選取 [檔案...]>[新增/遠端嵌入式管理單元...]>[憑證範本]>[新增 >]>[確定],以檢視憑證範本清單。
展開 [憑證範本],以滑鼠右鍵按一下 [Exchange 註冊代理程式 (離線要求)],然後選取 [複製範本]。
選取 [一般] 索引標籤,然後在 [範本顯示名稱] 欄位中輸入「ADFS 註冊代理程式」。 這會自動將範本名稱設定為 "ADFSEnrollmentAgent"。
選取 [安全性] 索引標籤,然後選取 [新增...]。
接下來,依序選取 [物件類型...]、[服務帳戶] 和 [確定]。
輸入 AD FS 的服務帳戶名稱,然後選取 [確定]。
- 在隔離式 AD FS 設定中,服務帳戶會命名為 "adfssvc$"
- 如果您使用 Microsoft Entra Connect 設定 AD FS,服務帳戶會命名為 "aadcsvc$"
當服務帳戶已新增並顯示在 [安全性] 索引標籤之後,請在 [群組或使用者名稱] 窗格中選取此帳戶,並在 [AD FS 服務帳戶的權限] 窗格中針對 [註冊] 和 [自動註冊] 選取 [允許],然後選取 [確定] 進行儲存。
若要更新現有的註冊代理程式憑證範本:
- 在憑證授權單位上,從 [開始] 功能表執行 mmc.exe,以啟動 Microsoft Management Console。
- 選取 [檔案...]>[新增/遠端嵌入式管理單元...]>[憑證範本]>[新增 >]>[確定],以檢視憑證範本清單。
- 展開 [憑證範本],按兩下對應至 AD FS 伺服器上設定的範本。 在 [一般] 索引標籤上,範本名稱應該符合您在上方找到的名稱。
- 選取 [安全性] 索引標籤,然後選取 [新增...]。
- 接下來,依序選取 [物件類型...]、[服務帳戶] 和 [確定]。
- 輸入 AD FS 的服務帳戶名稱,然後選取 [確定]。
- 在隔離式 AD FS 設定中,服務帳戶會命名為 "adfssvc$"
- 如果您使用 Microsoft Entra Connect 設定 AD FS,服務帳戶會命名為 "aadcsvc$"
- 當服務帳戶已新增並顯示在 [安全性] 索引標籤之後,請在 [群組或使用者名稱] 窗格中選取此帳戶,並在 [AD FS 服務帳戶的權限] 窗格中針對 [註冊] 和 [自動註冊] 選取 [允許],然後選取 [確定] 進行儲存。
建立智慧卡登入憑證範本
若要建立智慧卡登入憑證範本:
在憑證授權單位上,從 [開始] 功能表執行 mmc.exe,以啟動 Microsoft Management Console。
選取 [檔案...]>[新增/遠端嵌入式管理單元...]>[憑證範本]>[新增]>[確定],以檢視憑證範本清單。
展開 [憑證範本],以滑鼠右鍵按一下 [智慧卡登入],然後選取 [複製範本]。
選取 [一般] 索引標籤,然後在 [範本顯示名稱] 欄位中輸入 "ADFS SSO"。 這會自動將範本名稱設定為 "ADFSSSO"。
注意
由於此憑證是隨選要求,因此建議將有效期間縮短為 8 小時,並將更新期間縮短為 1 小時。
選取 [主體名稱] 索引標籤,然後選取 [在要求中提供]。 當您看到警示訊息時,選取 [確定]。
選取 [發行需求] 索引標籤。
選取 [授權簽章的數目],然後輸入值 1。
針對 [應用程式原則],選取 [憑證要求代理程式]。
選取 [安全性] 索引標籤,然後選取 [新增...]。
選取 [物件類型...]、[服務帳戶] 和 [確定]。
輸入 AD FS 的服務帳戶名稱,就像您在建立註冊代理程式憑證範本一節中所做的一樣。
- 在隔離式 AD FS 設定中,服務帳戶會命名為 "adfssvc$"
- 如果您使用 Microsoft Entra Connect 設定 AD FS,服務帳戶會命名為 "aadcsvc$"
當服務帳戶已新增並顯示在 [安全性] 索引標籤之後,請在 [群組或使用者名稱] 窗格中選取此帳戶,並針對 [註冊] 和 [自動註冊] 選取 [允許],然後選取 [確定] 進行儲存。
啟用新的憑證範本:
若要啟用新的憑證範本:
在憑證授權單位上,從 [開始] 功能表執行 mmc.exe,以啟動 Microsoft Management Console。
選取 [檔案...]>[新增/移除嵌入式管理單元...]>[憑證授權單位]>[新增 >]>[完成]>[確定],以檢視憑證授權單位。
展開左側窗格中的 [憑證授權單位],然後開啟 [憑證範本]。
以滑鼠右鍵按一下顯示憑證範本清單的中間窗格,選取 [新增],然後選取 [要發行的憑證範本]。
選取 [ADFS 註冊代理程式] 和 [ADFS SSO],然後選取 [確定]。 您應該會在中間窗格內看到這兩個範本。
注意
如果您已設定註冊代理程式憑證範本,則只需要新增 ADFS SSO 範本。
設定 AD FS 伺服器
您必須將 Active Directory 同盟服務 (AD FS) 伺服器設定為使用新的憑證範本,並設定信賴憑證者信任以支援 SSO。
您 AD FS 伺服器與 Azure 虛擬桌面服務之間的信賴憑證者信任,可讓單一登入憑證要求正確地轉送到您的網域環境。
設定 AD FS 單一登入時,您必須選擇共用金鑰或憑證:
- 如果您有單一 AD FS 伺服器,您可以選擇共用金鑰或憑證。
- 如果您有多部 AD FS 伺服器,則必須選擇憑證。
用來產生權杖以登入 Windows 的共用金鑰或憑證,必須安全地儲存在 Azure Key Vault 中。 您可以將祕密儲存在現有的金鑰保存庫中或部署新的金鑰保存庫。 不論是哪一種情況,您都必須確定設定正確的存取原則,讓 Azure 虛擬桌面服務可以進行存取。
使用憑證時,您可以使用任何一般用途憑證,而且不需要主體名稱或主體別名 (SAN)。 雖然並非必要,但建議建立由有效憑證授權單位發行的憑證。 此憑證可以直接在 Azure Key Vault 中建立,而且必須具有可匯出的私密金鑰。 使用下列指令碼可匯出公開金鑰,並用來設定 AD FS 伺服器。 請注意,此憑證與必須具有適當主體名稱和有效憑證授權單位的 AD FS SSL 憑證不同。
PowerShell 資源庫中提供的 PowerShell 指令碼 ConfigureWVDSSO.ps1 會設定您的 AD FS 伺服器以用於信賴憑證者信任,並視需要安裝憑證。
此指令碼只有一個必要參數 ADFSAuthority,這是解析為 AD FS 並使用 "/adfs" 作為其尾碼的 URL。 例如: https://adfs.contoso.com/adfs
。
在 AD FS VM 上,執行下列 PowerShell Cmdlet,將 AD FS 設定為使用上一節中的憑證範本:
Set-AdfsCertificateAuthority -EnrollmentAgentCertificateTemplate "ADFSEnrollmentAgent" -LogonCertificateTemplate "ADFSSSO" -EnrollmentAgent
注意
如果您已設定 EnrollmentAgentCertificateTemplate,請確定您使用現有的範本名稱,而不是 ADFSEnrollmentAgent。
執行 ConfigureWVDSSO.ps1 指令碼。
注意
您需要
$config
變數值才能完成指示的下一個部分,因此請勿關閉您用來完成先前指示的 PowerShell 視窗。 您可以繼續使用相同的 PowerShell 視窗,或在啟動新的 PowerShell 工作階段時將其保持開啟狀態。如果您要使用 Key Vault 中的共用金鑰,請在 AD FS 伺服器上執行下列 PowerShell Cmdlet,並將 ADFSServiceUrl 取代為完整 URL 以連線到您的 AD FS 服務:
Install-Script ConfigureWVDSSO $config = ConfigureWVDSSO.ps1 -ADFSAuthority "<ADFSServiceUrl>" [-WvdWebAppAppIDUri "<WVD Web App URI>"] [-RdWebURL "<RDWeb URL>"]
注意
您需要 WvdWebAppAppIDUri 和 RdWebURL 屬性,才能在主權雲端 (例如 Azure Government) 中設定環境。 在 Azure Commercial 雲端中,這些屬性會自動設定為
https://www.wvd.microsoft.com
和https://rdweb.wvd.microsoft.com
。如果您要使用 Key Vault 中的憑證,請在 AD FS 伺服器上執行下列 PowerShell Cmdlet,並將 ADFSServiceUrl 取代為完整 URL 以連線到您的 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 Commercial 雲端中,這些屬性會自動設定為
https://www.wvd.microsoft.com
和https://rdweb.wvd.microsoft.com
。
執行下列 PowerShell Cmdlet,在 Azure Key Vault 上設定存取原則:
Set-AzKeyVaultAccessPolicy -VaultName "<Key Vault Name>" -ServicePrincipalName 9cdead84-a844-4324-93f2-b2e6bb768d07 -PermissionsToSecrets get -PermissionsToKeys sign
將共用金鑰或憑證儲存在 Azure Key Vault 中,並加上標籤以包含允許使用祕密之訂閱識別碼的逗號分隔清單。
如果您要使用 Key Vault 中的共用金鑰,請執行下列 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]}
如果您的憑證已在 Key Vault 中,請執行下列 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 以匯入 Key Vault 中的憑證並設定標籤:
$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 資訊:
如果您要使用 Key Vault 中的共用金鑰,請執行下列 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 Commercial 雲端中,此屬性應該設定為
https://www.wvd.microsoft.com
。 不過,此屬性的必要設定會與其他雲端不同,例如 Azure Government 雲端。如果您要使用 Key Vault 中的憑證,請執行下列 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 Commercial 雲端中,此屬性應該設定為
https://www.wvd.microsoft.com
。 不過,此屬性的必要設定會與其他雲端不同,例如 Azure Government 雲端。
設定其他主機集區
當您需要設定其他主機集區時,您可以擷取用來設定現有主機集區的設定來設定新的主機集區。
若要從現有的主機集區擷取設定,請開啟 PowerShell 視窗並執行此 Cmdlet:
Get-AzWvdHostPool -Name "<Host Pool Name>" -ResourceGroupName "<Host Pool Resource Group Name>" | fl *
您可以遵循下列步驟,使用相同的 SsoClientId、SsoClientSecretKeyVaultPath、SsoSecretType 和 SsoadfsAuthority 值來設定 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 Commercial 雲端中,此屬性為 https://www.wvd.microsoft.com
。 這與其他雲端不同,例如 Azure Government 雲端。
下一步
現在您已設定單一登入,您可以登入支援的 Azure 虛擬桌面用戶端,以在使用者工作階段中加以測試。 如果您想要了解如何使用新認證來連線到工作階段,請參閱下列文章: