共用方式為


對應至 Microsoft Entra ID 中的 certificateUserIds 屬性

Microsoft Entra ID 中的使用者物件具有名為 certificateUserIds 的屬性。

  • certificateUserIds 屬性為多重值,最多可保留 10 個值。
  • 每個值不可超過 1024 個字元。
  • 每個值不得重複。 當一個值存在於某個使用者帳戶上時,該值就無法寫入相同 Microsoft Entra 租用戶中的其他任何使用者帳戶。
  • 值不需使用電子郵件識別碼格式。 certificateUserIds 屬性可儲存不可路由的使用者主體名稱 (UPN),例如 bob@woodgrove 或 bob@local

注意

雖然每個值在 Microsoft Entra ID 中不得重複,但是您可以實作多個使用者名稱繫結,將單一憑證對應至多個帳戶。 如需詳細資訊,請參閱多個使用者名稱繫結

憑證使用者識別碼支援的模式

儲存在 certificateUserIds 中的值應採用下表中所述的格式。 X509:<Mapping>前綴詞區分大小寫。

憑證對應欄位 certificateUserIds 中的值範例
校長名稱 X509:<PN>bob@woodgrove.com
校長名稱 X509:<PN>bob@woodgrove
RFC822Name(RFC 822 名稱) X509:<RFC822>user@woodgrove.com
發行者與主體 X509:<I>DC=com,DC=contoso,CN=CONTOSO-DC-CA<S>DC=com,DC=contoso,OU=UserAccounts,CN=mfatest
主題 X509:<S>DC=com,DC=contoso,OU=UserAccounts,CN=mfatest
滑雪 X509:<SKI>aB1cD2eF3gH4iJ5kL6mN7oP8qR
SHA1公鑰 X509:<SHA1-PUKEY>cD2eF3gH4iJ5kL6mN7oP8qR9sT
發行者與序列號 X509:<I>DC=com,DC=contoso,CN=CONTOSO-DC-CA<SR>eF3gH4iJ5kL6mN7oP8qR9sT0uV
若要取得序號的正確值,請執行此命令,並儲存 certificateUserIds 中顯示的值:
語法:
Certutil –dump –v [~certificate path~] >> [~dumpFile path~]
範例:
certutil -dump -v firstusercert.cer >> firstCertDump.txt

更新「certificateUserIds」的角色

僅限雲端的使用者至少必須具有特殊權限驗證管理員角色,才能更新 certificateUserIds。 僅限雲端的使用者可以使用 Microsoft Entra 系統管理中心或 Microsoft Graph 來更新 certificateUserIds。

同步的使用者至少必須具有混合式身分識別管理員角色,才能更新 certificateUserIds。 唯有 Microsoft Entra Connect 可透過同步內部部署的值來更新憑證使用者 ID。

注意

Active Directory 管理員可以進行變更,以影響 Microsoft Entra ID 中任何同步帳戶的 certificateUserIds 值。 管理員可以包含對已同步使用者帳戶具有委派系統管理權限的帳戶,或對 Microsoft Entra Connect 伺服器具有系統管理權限的帳戶。

如何使用PowerShell模組,從終端用戶憑證中尋找用戶的正確 CertificateUserIds 值

根據租戶上的 UserName 綁定配置,憑證 UserId 會遵循其值的特定模式。 下列 PowerShell 命令可協助系統管理員從用戶憑證擷取用戶憑證 UserIds 屬性的確切值。 系統管理員可以對於與指定使用者名稱綁定的某位使用者,取得 Certificate UserIds 屬性中的目前值,並設定該屬性的值。

如需詳細資訊,請參閱 Microsoft Entra PowerShell 安裝Microsoft Graph PowerShell

  1. 啟動 PowerShell。

  2. 安裝並匯入 Microsoft Graph PowerShell SDK。

    Install-Module Microsoft.Graph -Scope CurrentUser
    Import-Module Microsoft.Graph.Authentication
    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    
  3. 安裝Microsoft Entra PowerShell 模組(最低必要版本為 1.0.6)

        Install-Module -Name Microsoft.Entra
    

如需 CertificateBasedAuthentication 模組的詳細資訊, 請參閱這裡

Get-EntraUserCBAAuthorizationInfo

Get-EntraUserCBAAuthorizationInfo 可協助擷取Microsoft Entra ID 使用者的授權資訊,包括憑證型驗證標識符。

語法: Get-EntraUserCBAAuthorizationInfo [-UserId] <String>[-Raw][<CommonParameters>]

範例 1:依用戶主體名稱取得使用者的授權資訊

Connect-Entra -Scopes 'User.Read.All' 
Get-EntraUserCBAAuthorizationInfo -UserId ‘user@contoso.com'

回應:

屬性
身份識別碼 aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
顯示名稱 Contoso User
使用者主要名稱 (UserPrincipalName) user@contoso.com
用戶類型 Member
授權資訊 @{CertificateUserIds=System.Object[]; RawAuthorizationInfo=System.Collections.Hashtable}

此命令會擷取具有指定用戶主體名稱的使用者授權資訊。

範例 2:擷取使用者的授權資訊

Connect-Entra -Scopes 'User.Read.All'
$userInfo = Get-EntraUserCBAAuthorizationInfo -UserId 'user@contoso.com'
$userInfo.AuthorizationInfo.CertificateUserIds | Format-Table Type, TypeName, Value

回應:

類型 類型名稱
PN 校長名稱 user@contoso.com
S 主題 CN=user@contoso.com
滑雪 主體金鑰識別符 1111112222333344445555

此範例會擷取授權資訊。

範例 3:擷取特定憑證用戶標識碼

Connect-Entra -Scopes 'User.Read.All'
$userInfo = Get-EntraUserCBAAuthorizationInfo -UserId user@contoso.com'
$userInfo.AuthorizationInfo.CertificateUserIds | Where-Object Type -eq "PN" | Select-Object -ExpandProperty Value

回應:user@contoso.com

此範例會擷取授權資訊,然後篩選,只顯示主體名稱憑證值。

Get-EntraUserCertificateUserIdsFromCertificate

傳回一個物件,其中包含在 Microsoft Entra ID 中進行 Certificate-Based 驗證時設定 CertificateUserIDs 所需的憑證值。

語法: Get-EntraUserCertificateUserIdsFromCertificate [-Path] <string>[[-Certificate] <System.Security.Cryptography.X509Certificates.X509Certificate2> [-CertificateMapping] <string>][<CommonParameters>]

如果憑證中的值太長,您可以將輸出傳送至檔案,並從該處複製。

Connect-Entra -Scopes 'User.Read.All'
Get-EntraUserCertificateUserIdsFromCertificate -Path C:\Downloads\test.pem | Format-List | Out-File -FilePath ".\certificateUserIds.txt"

範例 1:從憑證路徑擷取憑證物件

Get-EntraUserCertificateUserIdsFromCertificate -Path 'C:\path\to\certificate.cer'

回應:

名稱
主題 X509:<S>DC=com,DC=contoso,OU=UserAccounts,CN=user
發行者與序列號 X509:<I>DC=com,DC=contoso,CN=CONTOSO-DC-CA<SR>eF3gH4iJ5kL6mN7oP8qR9sV0uD
RFC822Name(RFC 822 名稱) X509:<RFC822>user@contoso.com
SHA1公鑰 X509:<SHA1-PUKEY>cA2eB3gH4iJ5kL6mN7oP8qR9sT
發行者與主體 X509:<I>DC=com,DC=contoso,CN=CONTOSO-DC-CA<S>DC=com,DC=contoso,OU=UserAccounts,CN=user
滑雪 X509:<SKI>aB1cD2eF3gH4iJ5kL6mN7oP8qR
校長名稱 X509:<PN>user@contoso.com

此範例示範如何取得所有可能的憑證對應做為 物件。

範例 2:從憑證路徑和憑證對應擷取憑證物件

Get-EntraUserCertificateUserIdsFromCertificate -Path 'C:\path\to\certificate.cer' -CertificateMapping 'Subject' 

回應:X509:<S>DC=com,DC=contoso,OU=UserAccounts,CN=user

此命令會傳回 PrincipalName 屬性。

範例 3:從憑證擷取憑證物件

$text = "-----BEGIN CERTIFICATE-----
MIIDiz...=
-----END CERTIFICATE-----"
$bytes = [System.Text.Encoding]::UTF8.GetBytes($text)
$certificate = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($bytes)
Get-EntraUserCertificateUserIdsFromCertificate -Certificate $certificate -CertificateMapping 'Subject'

回應:X509:<S>DC=com,DC=contoso,OU=UserAccounts,CN=user

此命令會傳回 PrincipalName 屬性。

Set-EntraUserCBACertificateUserId

使用憑證檔案或物件,為Microsoft Entra ID 中的使用者設定憑證型驗證用戶標識符。

語法 Set-EntraUserCBACertificateUserId -UserId <string>[-CertPath <string>][-Cert <System.Security.Cryptography.X509Certificates.X509Certificate2>]-CertificateMapping <string[]>[<CommonParameters>]

範例 1:使用憑證路徑更新使用者的憑證授權資訊

Connect-Entra -Scopes 'Directory.ReadWrite.All', 'User.ReadWrite.All'
Set-EntraUserCBACertificateUserId -UserId ‘user@contoso.com' -CertPath 'C:\path\to\certificate.cer' -CertificateMapping @('Subject', 'PrincipalName')

本範例會使用憑證檔案來設定指定使用者的憑證用戶標識碼,並對應 [主體] 和 [PrincipalName] 字段。 您可以使用 Get-EntraUserCBAAuthorizationInfo 命令來檢視更新的詳細資料。

範例 2:使用憑證更新使用者的憑證授權資訊

Connect-Entra -Scopes 'Directory.ReadWrite.All', 'User.ReadWrite.All'
$text = '-----BEGIN CERTIFICATE-----
MIIDiz...=
-----END CERTIFICATE-----'
$bytes = [System.Text.Encoding]::UTF8.GetBytes($text)
$certificate = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($bytes)
Set-EntraUserCBACertificateUserId -UserId user@contoso.com' -Cert $certificate -CertificateMapping @('RFC822Name', 'SKI')

本範例會使用憑證對象來設定指定使用者的憑證用戶標識碼,並對應 RFC822Name 和 SKI 字段。 您可以使用 Get-EntraUserCBAAuthorizationInfo 命令來檢視更新的詳細資料。

使用 Microsoft Entra 系統管理中心更新 certificateUserIds

使用下列步驟來更新使用者的證書用戶ID:

  1. 登入 Microsoft Entra 系統管理中心,若是僅限雲端的使用者,以至少為特殊權限驗證管理員的身分登入,若是同步的使用者,則以至少為混合式身分識別管理員的身分登入。

  2. 搜尋並選取 [所有使用者]

    測試使用者帳戶的螢幕擷取畫面。

  3. 選擇使用者,然後選擇 [編輯屬性]

  4. 在 [授權資訊] 旁,選取 [檢視]。

    檢視授權資訊的螢幕擷取畫面。

  5. 點選 編輯憑證使用者識別碼

    編輯憑證使用者識別碼的螢幕擷取畫面。

  6. 選取 新增

    如何新增 certificateUserIds 的螢幕擷取畫面。

  7. 輸入值,然後選擇 [儲存]。 您最多可以新增四個值,每個值 120 個字元。

    證書使用者 ID 的輸入值螢幕擷取畫面。

使用 Microsoft Graph 查詢來更新 certificateUserIds。

下列範例示範如何使用 Microsoft Graph 來查閱 certificateUserIds 並將其更新。

查閱證書使用者ID

授權的呼叫端可執行 Microsoft Graph 查詢,以尋找具有指定 certificateUserId 值的所有使用者。 在 Microsoft Graph 使用者物件上,certificateUserIds 的集合會儲存在 authorizationInfo 屬性中。

要取得所有使用者物件的 certificateUserIds:

GET https://graph.microsoft.com/v1.0/users?$select=authorizationinfo
ConsistencyLevel: eventual

若要依使用者的 ObjectId 取得該使用者的 certificateUserIds:

GET https://graph.microsoft.com/v1.0/users/{user-object-id}?$select=authorizationinfo
ConsistencyLevel: eventual

若要擷取 certificateUserIds 中具有特定值的使用者物件:

GET https://graph.microsoft.com/v1.0/users?$select=authorizationinfo&$filter=authorizationInfo/certificateUserIds/any(x:x eq 'X509:<PN>user@contoso.com')&$count=true
ConsistencyLevel: eventual

您也可以使用 notstartsWith 運算子來比對篩選條件。 若要根據 certificateUserIds 物件進行篩選,要求中必須包含 $count=true 查詢字串,而且 ConsistencyLevel 標頭必須設定為 eventual

更新「certificateUserIds」

執行 PATCH 要求來更新指定使用者的 certificateUserIds。

請求主體

PATCH https://graph.microsoft.com/v1.0/users/{user-object-id}
Content-Type: application/json
{
    "authorizationInfo": {
        "certificateUserIds": [
            "X509:<PN>123456789098765@mil"
        ]
    }
}

使用 Microsoft Graph PowerShell 命令更新 certificateUserIds

針對此設定,您可以使用 Microsoft Graph PowerShell

  1. 以系統管理員權限啟動 PowerShell。

  2. 安裝並匯入 Microsoft Graph PowerShell SDK。

        Install-Module Microsoft.Graph -Scope CurrentUser
        Import-Module Microsoft.Graph.Authentication
        Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    
  3. 連線到租戶並全部接受。

       Connect-MGGraph -Scopes "Directory.ReadWrite.All", "User.ReadWrite.All" -TenantId <tenantId>
    
  4. 列出指定使用者的 certificateUserIds 屬性。

      $results = Invoke-MGGraphRequest -Method get -Uri 'https://graph.microsoft.com/v1.0/users/<userId>?$select=authorizationinfo' -OutputType PSObject -Headers @{'ConsistencyLevel' = 'eventual' }
      #list certificateUserIds
      $results.authorizationInfo
    
  5. 使用 certificateUserIds 值建立變數。

      #Create a new variable to prepare the change. Ensure that you list any existing values you want to keep as this operation will overwrite the existing value
      $params = @{
            authorizationInfo = @{
                  certificateUserIds = @(
                  "X509:<SKI>gH4iJ5kL6mN7oP8qR9sT0uV1wX", 
                  "X509:<PN>user@contoso.com"
                  )
            }
      }
    
  6. 更新 certificateUserIds 屬性。

       $results = Invoke-MGGraphRequest -Method patch -Uri 'https://graph.microsoft.com/v1.0/users/<UserId>/?$select=authorizationinfo' -OutputType PSObject -Headers @{'ConsistencyLevel' = 'eventual' } -Body $params
    

透過使用者物件更新 certificateUserIds

  1. 取得使用者物件。

      $userObjectId = "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
      $user = Get-MgUser -UserId $userObjectId -Property AuthorizationInfo
    
  2. 更新使用者物件的 certificateUserIds 屬性。

       $user.AuthorizationInfo.certificateUserIds = @("X509:<SKI>iJ5kL6mN7oP8qR9sT0uV1wX2yZ", "X509:<PN>user1@contoso.com") 
       Update-MgUser -UserId $userObjectId -AuthorizationInfo $user.AuthorizationInfo
    

使用 Microsoft Entra Connect 更新 certificateUserIds(證書使用者 ID)

Microsoft Entra Connect 支援將值從內部部署的 Active Directory 環境同步至 certificateUserIds。 內部部署的 Active Directory 支援憑證式驗證和多個使用者名稱繫結。 請確定您使用最新版本的 Microsoft Entra Connect

若要使用這些對應方法,您必須在內部部署的 Active Directory 中填入使用者物件的 altSecurityIdentities 屬性。 此外,在您如 KB5014754中所述,在 Windows 域控制器上套用憑證式驗證變更之後,您可能已實作一些無法存取的對應方法 (Type=strong) 對應方法,以符合內部部署 Active Directory 強式憑證系結強制執行需求。

若要防止同步錯誤,請確定同步的值遵循 certificateUserIds 的其中一種支援格式。

開始之前,請確定從內部部署 Active Directory 同步的所有使用者帳戶符合下列情況:

  • 其altSecurityIdentities屬性中的10或更少值

  • 值不得超過 1,024 個字元

  • 沒有重複值

    請仔細考慮重複的值是否意在將單一憑證對應至多個內部部署的 Active Directory 帳戶。 如需詳細資訊,請參閱多個使用者名稱繫結

    注意

    在特定案例中,一小部分使用者可能會有適當的業務理由,將單一憑證對應至一個以上的內部部署 Active Directory 帳戶。 請檢閱這些案例,並視需要實作不同的對應方法,以同時對應至內部部署 Active Directory 和 Microsoft Entra ID 中的多個帳戶。

持續同步使用者憑證ID的考量

  • 請確保在內部設置的 Active Directory 中填入值的佈建程序實施適當的運行衛生。 只會填入與目前有效憑證相關聯的值。
  • 這些值會在對應的憑證過期或撤銷時移除。
  • 不會填入大於 1024 個字元的值。
  • 不會配置重複的值。
  • 使用 Microsoft Entra Connect Health 來監視同步處理。

請遵循下列步驟來設定 Microsoft Entra Connect,將 userPrincipalName 同步至 certificateUserIds:

  1. 在 Microsoft Entra Connect 伺服器上,尋找並啟動 [同步處理規則編輯器]

  2. 選取 方向,然後選取 輸出

    輸出同步處理規則的螢幕擷取畫面。

  3. 將規則 Out 傳送到 Microsoft Entra ID – User Identity,選取 編輯,再選取 [是] 確認。

    使用者身分識別的螢幕擷取畫面。

  4. 在 [優先順序] 欄位中輸入高數字,然後選取 [下一步]

    優先順序值的螢幕擷取畫面。

  5. 選取 轉換>新增轉換。 您可能需要向下捲動轉換清單,才能建立新的轉換。

同步 X509:<PN>PrincipalNameValue

若要同步處理 X509:<PN>PrincipalNameValue,請建立輸出同步處理規則,然後在流程類型中選擇 [運算式]。 將目標屬性選擇為 certificateUserIds,然後在來源欄位中新增下列運算式。 如果您的來源屬性不是 userPrincipalName,您可據以變更運算式。

"X509:<PN>"&[userPrincipalName]

如何同步 x509 的螢幕截圖。

同步 X509:<RFC822>RFC822Name

若要同步 X509:<RFC822>RFC822Name,請建立一個輸出同步規則,然後在流程類型中選擇 運算式。 將目標屬性選擇為 certificateUserIds,然後在來源欄位中新增下列運算式。 如果您的來源屬性不是 userPrincipalName,您可據以變更運算式。

"X509:<RFC822>"&[userPrincipalName]

如何同步 RFC822Name 的螢幕截圖。

  1. 選取 [目標屬性]、選取 [certificateUserIds]、選取 [來源]、選取 [userPrincipalName],然後選取 [儲存]。

    如何儲存規則的螢幕擷取畫面。

  2. 選取 [確定] 以確認。

重要

上述範例使用 userPrincipalName atribute 作為轉換規則中的來源屬性。 您可以使用任何可用的屬性搭配適當的值。 例如,某些組織會使用郵件屬性。 關於更複雜的轉換規則,請參閱 Microsoft Entra Connect 同步:了解宣告式佈建運算式

如需宣告式佈建運算式的詳細資訊,請參閱 Microsoft Entra Connect:宣告式佈建運算式

將 altSecurityIdentities 屬性從 Active Directory 同步至 Microsoft Entra certificateUserIds

altSecurityIdentities 屬性不是預設屬性集的一部分。 系統管理員必須將新的屬性新增至 Metaverse 中的 person 物件,然後建立適當的同步規則,以將此資料轉送至 Microsoft Entra ID 中的 certificateUserIds。

  1. 開啟 Metaverse Designer,然後選取 person 物件。 若要建立 alternativeSecurityId 屬性,請選取 新增屬性。 選取 [字串 (不可編製索引)] 以建立大小最多 1024 個字元的屬性,這是 certificateUserIds 可支援的長度上限。 如果您選取 [字串 (可編製索引)],屬性值的大小上限為 448 個字元。 請務必選取多重值

    如何建立新屬性的螢幕擷取畫面。

  2. 開啟 Metaverse 設計工具,然後選取 alternativeSecurityId 將其新增至 person 物件。

    如何將「alternativeSecurityId」新增至「person」物件的截圖。

  3. 建立輸入同步處理規則,以從 altSecurityIdentities 轉換為 alternativeSecurityId 屬性。

    在輸入規則中,使用下列選項。

    選項
    名稱 規則的描述性名稱,例如:In from Active Directory - altSecurityIdentities
    連線的系統 內部部署的 Active Directory 網域
    連線的系統物件類型 使用者
    Metaverse 物件類型
    優先順序 選擇目前未使用且低於 100 的數字

    然後選取 [轉換,然後從來源屬性 altSecurityIdentities 建立與目標屬性 alternativeSecurityId 的直接對應,如下列螢幕快照所示。

    如何從 altSecurityIdentities 轉換為 alternateSecurityId 屬性的螢幕擷取畫面。

  4. 建立輸出同步處理規則,從 alternativeSecurityId 屬性轉換成 Microsoft Entra ID 中的 certificateUserIds 屬性。

    選項
    名稱 規則的描述性名稱,例如:「Out to Microsoft Entra ID - certificateUserIds」
    連線的系統 您的 Microsoft Entra 網域
    連線的系統物件類型 使用者
    Metaverse 物件類型
    優先順序 選擇目前未使用且高於所有預設規則的較高數字,例如 150

    然後選取 轉換,並從來源屬性 alternativeSecurityId 建立到目標屬性 certificateUserIds 的直接對應,如下列螢幕快照所示。

    螢幕擷取畫面顯示將 alternateSecurityId 屬性轉換為 certificateUserIds 的輸出同步規則。

  5. 執行同步,將資料填入 certificateUserIds 屬性。

  6. 若要確認是否成功,請在 Microsoft Entra ID 中檢視使用者的授權資訊。

    成功同步的螢幕擷取畫面。

若要對應 altSecurityIdentities 屬性中的部分值,請將步驟 4 中的「轉換」替換為「運算式」。 若要使用運算式,請繼續移至 [轉換] 索引標籤,並將 FlowType 選項變更為運算式,將目標屬性變更為 certificateUserIds,然後將運算式輸入 [來源] 欄位。 下列範例只會篩選符合 SKI 和 SHA1PublicKey 憑證對應欄位的值:

運算式的螢幕擷取畫面。

運算式程式碼

IIF(IsPresent([alternativeSecurityId]),
                Where($item,[alternativeSecurityId],BitOr(InStr($item, "X509:<SKI>"),InStr($item, "X509:<SHA1-PUKEY>"))>0),[alternativeSecurityId]
)

系統管理員可以從 altSecurityIdentities 中篩選符合所支援模式的值。 請確定 CBA 組態已更新,以支援已同步處理至 certificateUserId 的使用者名稱系結,並使用這些值啟用驗證。

下一步