HoloLens 中的共用 Microsoft Entra 帳戶

在 HoloLens 上,共用 Microsoft Entra (先前稱為 Azure Active Directory) 帳戶是一般 Microsoft Entra 使用者帳戶,可登入 HoloLens 而不需要任何認證。 此設定適用於下列條件成立的情況:

  • 多位人員共用一組相同的 HoloLens 裝置
  • 需要存取 Microsoft Entra 資源,例如 Dynamics 365 Guides 內容
  • 不需要追蹤已使用裝置的人員。

使用共用 Microsoft Entra 帳戶的主要優點

  • 簡化的部署。 先前,設定 Microsoft Entra 多個人員之間共用的帳戶,需要手動設定每個裝置。 共用 Microsoft Entra 帳戶可讓您設定環境一次,並在 Autopilot 中自動部署到任何裝置。
  • 絕佳的用戶體驗。 共用 Microsoft Entra 帳戶的使用者不需要輸入任何認證,才能開始使用裝置。 點選並移至!
  • Microsoft Entra 資源的存取權。 共用 Microsoft Entra 帳戶的使用者可以輕鬆地存取 Microsoft Entra 資源,讓您可以啟動遠端協助呼叫或開啟指南,而不需額外的驗證。

重要

由於您可以在 HoloLens 裝置上存取共用 Microsoft Entra 帳戶,而不需要輸入認證,您應該實際保護這些 HoloLens 裝置,讓只有獲授權的人員才能存取。 您也可以套用條件式存取原則、停用自助式密碼重設,以及設定指派的存取配置檔給使用這些帳戶的裝置,來鎖定這些帳戶。

注意

由於這些是共用帳戶,因此使用這些帳戶的使用者不會顯示典型的第一次登入設定畫面,包括 PIN 和鳶尾花註冊、生物特徵辨識數據收集通知,以及各種同意畫面。 您應該確定已透過原則設定這些帳戶的適當預設值, (請參閱快速) 設定 HoloLens 2 使用者,以及您的使用者知道這些預設值。

共用 Microsoft Entra 帳戶的已知限制

  • 共用 Microsoft Entra 帳戶無法使用 PIN 或鳶尾花登入目前版本,即使他們已註冊也一樣。

共用 Microsoft Entra 帳戶的概念概觀

此程式可讓 HoloLens 裝置設定使用者帳戶,並使用連結到裝置的認證登入該用戶帳戶,以及單獨登入該用戶帳戶。 此映像描述此程式:

共用帳戶圖表

  1. Intune 具有 SCEP 服務的 SCEP 組態配置檔。
  2. 裝置會加入 Intune,並接收配置檔資訊。
  3. 裝置會連絡 SCEP 服務,並使用 UPN 的 UPN HL-{Serial}@contoso.com接收裝置憑證。
  4. 裝置會使用憑證作為 MFA,登入 Entra ID 中的相互關聯用戶帳戶,以提供順暢的登入體驗。

憑證無法從裝置移除/匯出,而且用戶帳戶未設定任何其他形式的 MFA 可用。 此設定可確保共用帳戶只能由 HoloLens 裝置登入。

設定共用 Microsoft Entra 帳戶的步驟概觀

HoloLens 上的共享 Microsoft Entra 帳戶會實作為一般 Microsoft Entra 使用者帳戶,這些使用者帳戶是針對 Microsoft Entra 憑證型驗證所設定, (CBA)

概括而言,設定共用 Microsoft Entra 帳戶包含下列步驟:

  1. (建議) 設定目標裝置以使用 Autopilot 加入 Microsoft Entra 並註冊 Intune。
  2. 設定您的 Microsoft Entra 租使用者,以針對選取的帳戶群組啟用 Microsoft Entra CBA
  3. 設定 Microsoft Intune 將裝置組態套用至選取的裝置群組::
    1. 透過 Intune 的 SCEP 憑證設定檔,將用於 Microsoft Entra CBA 的用戶端憑證部署至裝置。
    2. 部署 CA 憑證 ,讓裝置信任客戶端憑證的簽發者。
    3. 部署共用帳戶組態,指示裝置哪些憑證適用於 Microsoft Entra CBA。
  4. 為共用 Microsoft Entra 帳戶準備個別裝置

必要條件

Microsoft HoloLens 組建 10.0.22621.1217 的測試人員預覽版開始提供共用 Microsoft Entra 帳戶支援。

除了在 HoloLens 上建置必要的作業系統之外,您也需要滿足 CBA Microsoft Entra 的必要條件 (如何設定 Microsoft Entra 憑證型驗證) 。

最後,您需要存取 Microsoft Intune,才能部署裝置組態和客戶端憑證。 如需透過 Intune 部署用戶端憑證的必要基礎結構,請參閱瞭解 Microsoft Intune 支援的憑證類型。 在此範例中,我們使用SCEP憑證。

注意

有多個選項可用來部署 SCEP 憑證,包括 Microsoft NDES 和 PKI。 針對 HoloLens,使用 Azure 服務來處理憑證註冊會比較簡單。 (Azure Marketplace 提供多個選項,可讓 HoloLens 共用 Microsft Entra 帳戶的設定與公司 PKI 隔離。

SCEP 服務的主要需求包括:

  1. 服務可以接受來自 Microsoft Intune的裝置憑證要求。
  2. 服務可以使用定義的 EKU (客戶端驗證和智慧卡登入) 產生憑證。

強烈建議您設定 Autopilot 的裝置。 Autopilot 可簡化終端用戶的裝置設定體驗。

設定您的 Microsoft Entra 租使用者以啟用 Microsoft Entra CBA

您必須設定 Microsoft Entra 租使用者,才能為選取的使用者群組啟用 Microsoft Entra CBA。

  1. 建立包含共用 Microsoft Entra 帳戶的 Microsoft Entra 群組。 例如,我們使用此群組的名稱 「SharedAccounts」。
  2. 建立包含共用 HoloLens 裝置的 Microsoft Entra 群組。 例如,我們使用此群組的名稱 「SharedDevices」。 此群組稍後會指派裝置型 Intune 組態配置檔。
  3. 針對 SharedAccounts 群組啟用 CBA) (Microsoft Entra 憑證型驗證。 如需完整的逐步指南,請參閱如何設定 Microsoft Entra 憑證式驗證。 設定此動作需要下列高階步驟:
    1. 將 (證書頒發機構單位) CA 憑證新增至 Microsoft Entra。 Microsoft Entra ID 可讓此 CA 簽發的用戶端憑證執行 CBA。
    2. 為 「SharedAccounts」 群組啟用 CBA。
    3. 設定 CBA,讓 CA 所簽發的憑證使用 MFA。 此步驟是確保使用者可以存取需要 MFA 的資源,而不需設定另一個因素。
    4. 透過 UserPrincipalName 啟用憑證系結。

Intune 組態

Intune 必須設定為部署 Microsoft Entra CBA 所需的憑證。 Intune 也必須部署設定,以指示裝置哪些憑證適用於 Microsoft Entra CBA。

透過 SCEP 部署客戶端憑證

裝置必須具有適當的客戶端憑證,才能執行 CBA Microsoft Entra。 建立 SCEP 組態,並將其指派給 「SharedDevices」:

  1. 憑證類型:裝置

  2. (UPN) 主體別名 新增用戶主體名稱, (SAN) 其中值是指派給裝置之共用帳戶的 UPN。 UPN 必須包含裝置序號,才能將它與裝置產生關聯。 您可以使用 Intune 變數 {{Device_Serial}} 來參考裝置序號。 例如,如果共用帳戶的名稱格式HL-123456789@contoso.com為 ,請輸入 的值HL-{{Device_Serial}}@contoso.com

  3. 密鑰儲存提供者 (KSP) :選取 [需要 TPM,否則失敗] 以確保無法從裝置導出憑證以用於其他地方。

  4. 請確定憑證至少具有下列 擴充密鑰使用方式, (EKU)

    • 智慧卡登入:1.3.6.1.4.1.311.20.2.2
    • 客戶端驗證:1.3.6.1.5.5.7.3.2

    您可以將其他 EKU 新增至此清單,以進一步限制 Microsoft Entra CBA 允許的憑證。 您必須將這些 EKU 新增至 ConfigureSharedAccount 原則的 XML。

範例 SCEP 組態

如需在 Intune 中設定 SCEP 的詳細步驟,請參閱搭配使用 SCEP 憑證配置檔搭配 Microsoft Intune

CA 憑證部署

裝置也必須信任發行其客戶端憑證的 CA。 建立受信任的憑證組態,並將它指派給 「SharedDevices」 群組。 此指派會將 CA 憑證部署到裝置。 請參閱檔:在 Microsoft Intune 中建立受信任的憑證配置檔

ConfigureSharedAccount 原則

此原則會告知裝置哪些憑證有效用於 Microsoft Entra CBA。 建立自定義裝置設定原則,並將其指派給 「SharedDevices」:

原則 資料類型
./Vendor/MSFT/Policy/Config/MixedReality/ConfigureSharedAccount 字串或字串 (XML 檔案)

範例設定:

<SharedAccountConfiguration>
    <SharedAccount>
        <!--
          TODO: Replace the example value below with your issuer certificate's thumbprint.
          You may customize the restrictions for which certificates are displayed. See below.
        -->
        <IssuerThumbprint>77de0879f69314d867bd08fcf2e8e6616548b3c8</IssuerThumbprint>
    </SharedAccount>
</SharedAccountConfiguration>

您可以自訂 Microsoft Entra CBA 顯示憑證的限制。 上述範例要求簽發者的憑證指紋符合所提供的值。 您也可以根據簽發者的名稱套用限制,或根據憑證上的擴充密鑰使用方式套用更多限制 (EKU) 。 如需如何設定 XML 的範例,請參閱 ConfigureSharedAccount XML 範例

儲存此裝置組態之前,請根據 ConfigureSharedAccount XML 架構 中指定的架構來驗證 XML,以確保其格式正確。

個別裝置設定

針對您想要針對共用 Microsoft Entra 帳戶設定的每個 HoloLens 裝置,執行下列步驟:

  1. 以透過SCEP部署客戶端憑證的步驟 2 中指定的格式建立 Microsoft Entra 使用者。 例如:HL-123456789@contoso.com
  2. 將該使用者新增至 「SharedAccounts」 群組。
  3. 確定裝置已新增至 「SharedDevices」 群組。 您應該先設定 Autopilot 的裝置,使其已存在於 Microsoft Entra 中。

如需可用來自動化此程式的PowerShell腳本範例,請參閱 範例裝置安裝腳本

測試您的設定

完成上述設定之後,您就可以在 HoloLens 上試用共用 Microsoft Entra 帳戶!

如果您的裝置已針對 Autopilot 進行設定,請透過裝置的一般 Autopilot 流程來取得裝置。 Autopilot 期間會套用必要的裝置設定。 Autopilot 流程完成後,您會看到下列畫面:

顯示共享帳戶的登入畫面

點選 [登入] 按鈕以開始使用共用 Microsoft Entra 帳戶。

疑難排解

問題:共用 Microsoft Entra 帳戶未顯示在登入畫面上!

解決方案: 首先,檢查裝置是否收到正確的憑證。 開啟憑證管理員 (憑證 管理員) ,並確定客戶端憑證和 CA 憑證都已成功部署到裝置。

針對客戶端憑證,請確定它已安裝到 「本機計算機」上的「我的」存放區。

顯示憑證位置的憑證管理員

如果憑證不存在,請遵循 Intune SCEP 配置檔的疑難解答步驟

如果憑證存在,請確定憑證在有效日期內具有預期的簽發者和 EKU:

顯示憑證屬性的憑證管理員

接下來,請確定您已套用至MixedReality/ConfigureSharedAccount的 XML 原則值格式正確。 您可以使用線上許多 XML 架構 (XSD) 驗證程式之一,檢查您的 XML 是否符合 ConfigureSharedAccount XML 架構中所述的架構。

問題:登入嘗試失敗!

解決方案:請遵循如何設定 Microsoft Entra 憑證型驗證的指示,確認您已正確設定 CBA。 此外,請參閱 CBA) 常見問題 Microsoft Entra 憑證式驗證 (常見問題。 有時候,在 Windows 桌面裝置上嘗試這些偵錯步驟可能很有説明:使用 Microsoft Entra 憑證型驗證的 Windows 智慧卡登入

參考資料

ConfigureSharedAccount XML 架構

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="SharedAccountConfiguration">
    <xsd:complexType mixed="true">
      <xsd:sequence>
        <xsd:element minOccurs="1" maxOccurs="1" name="SharedAccount">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:choice>
                <xsd:element name="IssuerThumbprint">
                  <xsd:simpleType>
                    <xsd:restriction base="xsd:string">
                      <xsd:maxLength value="40" />
                    </xsd:restriction>
                  </xsd:simpleType>
                </xsd:element>
                <xsd:element name="IssuerName">
                  <xsd:simpleType>
                    <xsd:restriction base="xsd:string">
                      <xsd:maxLength value="512" />
                    </xsd:restriction>
                  </xsd:simpleType>
                </xsd:element>
              </xsd:choice>
              <xsd:element minOccurs="0" maxOccurs="1" name="EkuOidRequirements">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element maxOccurs="5" name="Oid">
                      <xsd:simpleType>
                        <xsd:restriction base="xsd:string">
                          <xsd:maxLength value="100" />
                        </xsd:restriction>
                      </xsd:simpleType>
                    </xsd:element>
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

ConfigureSharedAccount XML 範例

要求簽發者憑證的主體為 CN=yourCA,DC=Test:

<SharedAccountConfiguration>
    <SharedAccount>
        <IssuerName>CN=yourCA, DC=Test</IssuerName>
    </SharedAccount>
</SharedAccountConfiguration>

要求簽發者憑證具有指定的指紋:

<SharedAccountConfiguration>
    <SharedAccount>
        <IssuerThumbprint>77de0879f69314d867bd08fcf2e8e6616548b3c8</IssuerThumbprint>
    </SharedAccount>
</SharedAccountConfiguration>

要求簽發者憑證具有指定的指紋,且客戶端憑證具有 OID 為 1.2.3.4.5.6 和 1.2.3.4.5.7 的 EKU:

<SharedAccountConfiguration>
    <SharedAccount>
        <IssuerThumbprint>77de0879f69314d867bd08fcf2e8e6616548b3c8</IssuerThumbprint>
        <EkuOidRequirements>
            <Oid>1.2.3.4.5.6</Oid>
            <Oid>1.2.3.4.5.7</Oid>
        </EkuOidRequirements>
    </SharedAccount>
</SharedAccountConfiguration>

智慧卡登入) 和 1.3.6.1.4.1.311.2.2 (智慧卡登入) 和 1.3.6.1.5.5.7.3.2 (客戶端驗證) 一律需要。

範例裝置安裝腳本

使用此範例裝置安裝文稿之前,您應該將參考從 「contoso」 變更為您的功能變數名稱。

<#
.Synopsis
Configures a device for shared account

.Description
This script configures a device for shared account.

Note that you'll need to have the necessary permissions in your tenant to manage
user and device memberships and query Intune devices.

.Example
.\ConfigureSharedDevice.ps1 400064793157
#>


param (
    [Parameter(Mandatory = $true)]
    [string]
    # Serial number of the device. Typically a 12-digit numeric string.
    $DeviceSerialNumber,
    [string]
    # Group ID of the group that contains the shared accounts such as HL-123456789@contoso.com
    $SharedAccountGroupId,
    [string]
    # Group ID of the group that contains the shared devices
    $SharedDeviceGroupId
)

function Install-Dependencies {
    Write-Host -Foreground Cyan "Installing Dependencies..."

    if (!(Get-InstalledModule Microsoft.Graph -ErrorAction SilentlyContinue)) {
        Write-Host -Foreground Cyan "Installing Microsoft.Graph"
        Install-Module Microsoft.Graph -Scope CurrentUser -Repository 'PSGallery'
    }

    Write-Host -Foreground Cyan "Installing Dependencies... Done"
}

function New-PasswordString {
    $alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_-=+[]{}|;:,.<>/?'
    $length = 40
    $password = ""
    for ($i = 0; $i -lt $length; $i++) {
        $password += $alphabet[(Get-Random -Minimum 0 -Maximum $alphabet.Length)]
    }

    return $password
}

function New-SharedUser {
    param (
        $UserName,
        $DisplayName
    )

    # Does user already exist?
    $searchResult = Get-MgUser -Count 1 -ConsistencyLevel eventual -Search "`"UserPrincipalName:$UserName`""

    if ($searchResult.Count -gt 0) {
        Write-Host -Foreground Cyan "$UserName exists, using existing user."
        return $searchResult
    }

    $mailNickName = $UserName.Split('@')[0];

    Write-Host -Foreground Cyan "Creating $UserName"

    $passwordProfile = @{
        Password = New-PasswordString
    }

    return New-MgUser -AccountEnabled -DisplayName $DisplayName -Country US -UsageLocation US -MailNickname $mailNickName -UserPrincipalName $UserName -PasswordProfile $passwordProfile
}

function New-SharedUserForDevice {
    param (
        $DeviceSerialNumber
    )

    $userName = "HL-$DeviceSerialNumber@contoso.onmicrosoft.com"
    $displayName = "Shared HoloLens"

    return New-SharedUser -UserName $userName -DisplayName $displayName
}

function Add-UserToGroup {
    param (
        $UserId,
        $GroupId
    )

    $groupResult = Get-MgGroup -GroupId $GroupId
    if ($groupResult.Count -eq 0) {
        throw "Failed to find user group"
    }

    Write-Host -Foreground Cyan "Adding user ($UserId) to group"
    New-MgGroupMember -GroupId $GroupId -DirectoryObjectId $UserId
}

function Get-DeviceAADId {
    param (
        $DeviceSerialNumber
    )

    $deviceResult = Get-MgDeviceManagementManagedDevice | Where-Object { $_.SerialNumber -eq $DeviceSerialNumber }

    if ($deviceResult.Count -eq 0) {
        throw "Cannot find device with serial number $DeviceSerialNumber in Intune"
    }

    $result = ($deviceResult | Select-Object -First 1).AzureAdDeviceId

    Write-Host "Found device: $result"

    return $result
}

function Add-DeviceToGroup {
    param (
        $DeviceAADId,
        $GroupId
    )

    $groupResult = Get-MgGroup -GroupId $GroupId
    if ($groupResult.Count -eq 0) {
        throw "Failed to find device group"
    }

    $deviceResult = Get-MgDevice -Count 1 -ConsistencyLevel eventual -Search "`"DeviceId:$DeviceAADId`""
    if ($deviceResult.Count -eq 0) {
        throw "Failed to find device $DeviceAADId"
    }

    Write-Host -Foreground Cyan "Adding device $($deviceResult.Id) to group"
    
    New-MgGroupMember -GroupId $GroupId -DirectoryObjectId $deviceResult.Id
}

function Register-SharedDevice {
    param (
        $DeviceSerialNumber
    )

    Install-Dependencies

    Connect-MgGraph -Scopes "User.ReadWrite.All", "Group.Read.All", "GroupMember.ReadWrite.All", "DeviceManagementManagedDevices.Read.All", "Device.ReadWrite.All"

    $deviceAADId = Get-DeviceAADId $DeviceSerialNumber
    Add-DeviceToGroup $deviceAADId $SharedDeviceGroupId

    $user = New-SharedUserForDevice $DeviceSerialNumber
    Add-UserToGroup $user.Id $SharedAccountGroupId
}

Register-SharedDevice $DeviceSerialNumber