本文將逐步引導您完成針對 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
若要建立新的註冊代理程式證書範本:
在證書頒發機構單位上,從 [開始] 功能表執行 mmc.exe ,以啟動 [Microsoft 管理控制台]。
選取 [檔案...]>新增/遠端嵌入式管理單元...>證書範>本加 >>請確定檢視證書範本清單。
展開 [ 證書範本],以滑鼠右鍵按兩下 [ Exchange 註冊代理程式 ([離線要求]) ,然後選取 [ 複製範本]。
選取 [ 一般] 索引標籤,然後在 [ 範本顯示名稱 ] 字段中輸入 “ADFS 註冊代理程式”。 這會自動將範本名稱設定為 「ADFSEnrollmentAgent」。。
選取 [ 安全性] 索引標籤,然後選取 [ 新增...]。
接下來,依序選取 [ 物件類型...] 和 [ 服務帳戶],然後選取 [ 確定]。
輸入AD FS的服務帳戶名稱,然後選取 [ 確定]。
- 在隔離的 AD FS 設定中,服務帳戶會命名為 “adfssvc$”
- 如果您使用 Microsoft Entra Connect 設定 AD FS,服務帳戶會命名為 “aadcsvc$”
新增服務帳戶並在 [安全性] 索引卷標中顯示之後,請在 [群組或使用者名稱] 窗格中選取它,然後在 [AD FS 服務帳戶的許可權] 窗格中選取 [允許註冊] 和 [自動註冊],然後選取 [確定] 儲存。
若要更新現有的註冊代理程式證書範本:
- 在證書頒發機構單位上,從 [開始] 功能表執行 mmc.exe ,以啟動 [Microsoft 管理控制台]。
- 選取 [檔案...]>新增/遠端嵌入式管理單元...>證書範>本加 >>請確定檢視證書範本清單。
- 展開 [ 證書範本],按兩下對應至AD FS 伺服器上所設定範本的範本。 在 [ 一般 ] 索引標籤上,範本名稱應該符合您在上面找到的名稱。
- 選取 [ 安全性] 索引標籤,然後選取 [ 新增...]。
- 接下來,依序選取 [ 物件類型...] 和 [ 服務帳戶],然後選取 [ 確定]。
- 輸入AD FS的服務帳戶名稱,然後選取 [ 確定]。
- 在隔離的 AD FS 設定中,服務帳戶會命名為 “adfssvc$”
- 如果您使用 Microsoft Entra Connect 設定 AD FS,服務帳戶會命名為 “aadcsvc$”
- 新增服務帳戶並在 [安全性] 索引卷標中顯示之後,請在 [群組或使用者名稱] 窗格中選取它,然後在 [AD FS 服務帳戶的許可權] 窗格中選取 [允許註冊] 和 [自動註冊],然後選取 [確定] 儲存。
建立智慧卡登入證書範本
若要建立智慧卡登入證書範本:
在證書頒發機構單位上,從 [開始] 功能表執行 mmc.exe ,以啟動 [Microsoft 管理控制台]。
選取 [檔案...]>新增/遠端嵌入式管理單元...>證書範>本加>請確定檢視證書範本清單。
展開 [ 證書範本],以滑鼠右鍵按兩下 [ 智慧卡登入] ,然後選取 [ 複製範本]。
選取 [ 一般] 索引標籤,然後在 [ 範本顯示名稱 ] 字段中輸入 “ADFS SSO”。 這會自動將範本名稱設定為 「ADFSSSO」。
注意事項
由於此憑證是隨選要求的,因此建議將有效期間縮短為8小時,並將更新期間縮短為1小時。
選取 [ 主體名稱] 索引 標籤,然後在要求中選取 [ 提供]。 當您看到警告訊息時,請選取 [ 確定]。
選取 [ 發行需求] 索引 標籤。
選 取 [授權簽章的數目] ,然後輸入 值 1。
針對 [應用程式原則],選取 [ 憑證要求代理程式]。
選取 [ 安全性] 索引標籤,然後選取 [ 新增...]。
選取 [物件類型...]、[ 服務帳戶] 和 [ 確定]。
輸入AD FS的服務帳戶名稱,就像您在 建立註冊代理程式證書範本 一節中所做的一樣。
- 在隔離的 AD FS 設定中,服務帳戶會命名為 “adfssvc$”
- 如果您使用 Microsoft Entra Connect 設定 AD FS,服務帳戶會命名為 “aadcsvc$”
新增服務帳戶並在 [ 安全 性] 索引卷標中顯示之後,在 [ 群組或使用者名稱 ] 窗格中選取它,選取 [ 允許 同時註冊] 和 [自動註冊],然後選取 [ 確定 ] 儲存。
開啟新的憑證樣本:
若要開啟新的憑證範本:
在證書頒發機構單位上,從 [開始] 功能表執行 mmc.exe ,以啟動 [Microsoft 管理控制台]。
選 取 [檔案...]>新增/移除嵌入式管理單元...>證書頒發機構單位>加 >>完成> 和 [確定] 檢視證書頒發機構單位。
展開左側窗格上的 [證書頒發機構單位],然後開啟 [ 證書範本]。
以滑鼠右鍵按下顯示證書範本清單的中間窗格,選取 [ 新增],然後選取 [要發出的證書範本]。
選取 [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
。
在AD FS VM上,執行下列 PowerShell Cmdlet,以設定 AD FS 使用上一節中的證書範本:
Set-AdfsCertificateAuthority -EnrollmentAgentCertificateTemplate "ADFSEnrollmentAgent" -LogonCertificateTemplate "ADFSSSO" -EnrollmentAgent
注意事項
如果您已經設定 EnrollmentAgentCertificateTemplate,請確定您使用現有的範本名稱,而不是 ADFSEnrollmentAgent。
執行 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.com
和https://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.com
和https://rdweb.wvd.microsoft.com
。
執行下列 PowerShell Cmdlet,在 Azure 金鑰保存庫 上設定存取原則:
Set-AzKeyVaultAccessPolicy -VaultName "<Key Vault Name>" -ServicePrincipalName 9cdead84-a844-4324-93f2-b2e6bb768d07 -PermissionsToSecrets get -PermissionsToKeys sign
將共用金鑰或憑證儲存在 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 *
您可以依照步驟,使用相同的 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 商業雲端中,此屬性為 https://www.wvd.microsoft.com
。 對於其他雲端而言會有所不同,例如 Azure Government 雲端。
後續步驟
現在您已設定單一登錄,您可以登入支援的 Azure 虛擬桌面用戶端,以在使用者工作階段中進行測試。 如果您想要瞭解如何使用新的認證連線到工作階段,請參閱下列文章: