使用 SharePoint 索引器來擷取權限的元資料,並根據使用者存取權篩選搜尋結果(預覽)

註

Azure AI 搜尋服務 可透過 Azure 入口網站、REST API 及 Azure SDK 取得。 它同時也是 Foundry IQ 的基礎,這是一個管理式知識層,能將企業內容轉化為可重複使用、權限感知的知識庫,供 Microsoft Foundry 入口網站中的代理使用。

重要

標記(預覽)的功能、能力或屬性不受服務等級協議涵蓋,也不建議用於生產工作負載,且在正式上架前可能會有所變動或受限。 Azure AI 搜尋服務 預覽條款適用於所有預覽功能,無論是獨立功能還是正式推出功能的一部分。

SharePoint 權限元資料擷取(預覽版)使用 Azure AI 搜尋服務 索引器來保留權限元資料,例如存取控制清單(ACL),以及 Microsoft 365 中 SharePoint 的其他內容。 索引器會將權限以元資料形式儲存在每份被索引的文件上。 查詢時,使用者只會收到他們有權限存取的文件。

架構圖,展示一個經過安全修剪的 RAG 解決方案,SharePoint索引器從SharePoint網站擷取文件與 ACL 權限元資料,並將其儲存在Azure AI 搜尋服務中索引,RAG 編排器會過濾查詢結果,使每位使用者只取得他們被授權存取的文件。

重要

對於需要完整的 SharePoint 權限模型、敏感度標籤及現成安全性調整的情境,請使用遠端 SharePoint 知識來源。 此方法直接透過 Copilot 檢索 API 呼叫SharePoint。 治理完全由 SharePoint 負責,查詢結果會自動遵守所有適用的權限與標籤。

先決條件

  • 任何區域中計費層級 (Basic 或更高) 的 Azure AI 搜尋服務。

  • 在 Microsoft 365 的網站、函式庫、資料夾和檔案中使用 SharePoint,並為其設定權限。

  • 完成 SharePoint 索引器文件 中的所有配置步驟,並依照本文所述的 ACL 特定要求。

  • 設定 Microsoft Entra 應用程式權限和適合你情境的憑證。 請參見 ACL 授權情境。 ACL 匯入需要應用程式權限。 不支援委派權限。 關於應用與委派的決策,請參見 「選擇你的權限設定」。

  • REST API 版本 2026-08-01-preview 或對應的預覽 SDK 套件。

限制

  • 增量 ACL 更新需要使用 2026-05-01-preview REST API 或更新版本的 API。 在早期的預覽 API 版本中,系統僅在每個項目首次擷取時擷取 ACL。 後續權限變更則需明確重新索引。 關於遷移步驟,請參見 索引內容與來源內容之間的權限同步。

  • 父範圍權限變更不會在後續索引器執行時自動被偵測。 如需瞭解重新整理選項,請參閱 同步索引內容與來源內容之間的權限。

  • Azure 入口網站不支援這個功能。

  • 此預覽版不支援下列功能:

    • SharePoint 資訊管理政策適用於使用者存取。 系統不會在查詢時評估、吸收或執行這些政策。

    • 可分享連結 範圍為「任何人」或「你組織中的人」。僅支援「特定人物」範圍的連結。

    • SharePoint群組(如擁有者、會員及訪客群組)自 2026-05-01-preview REST API 起支援。 請參見 配置 SharePoint 群組支援。 在較早的預覽 API 版本中,僅支援可解析為 Microsoft Entra 群組的 SharePoint 群組。

  • 以下索引器功能不支援來自 SharePoint 的索引文件權限繼承。 如果你在技能組或索引器中使用這些功能,文件層級的權限不會包含在索引內容中。

支援 SharePoint 權限模型

此預覽版支援文件、清單項目及現代 ASPX 網站頁面的基本 ACL。

SharePoint 功能 描述 支援 註釋
網站、文件庫、清單與頁面繼承 網站→函式庫/清單→資料夾→檔案/項目/頁面。 ✔️ 在擷取時評估;會針對每個項目計算有效 ACL。
資料夾、檔案、清單項目及頁面的唯一 ACL 項目層級存取權。 ✔️ 當第一次擷取時存在,且後續執行偵測到具有唯一權限之項目的 ACL 變更時,會包含此項。
SharePoint 清單項目 清單項目(allSiteLists 及 allSiteContent 容器)的權限。 ✔️ 預覽版,自 2026-05-01-preview REST API 版本起提供。
ASPX 網站頁面 現代網站頁面(allSitePages 及 allSiteContent 容器)上的權限。 ✔️ 預覽版,自 2026-05-01-preview REST API 版本起提供。
Microsoft Entra(Microsoft 365 與安全性)群組 基於群組的存取 ✔️ 當群組 ID 可解析為 Microsoft Entra 識別碼 (ID) 時會包含。
SharePoint 站點群組 擁有者/會員/訪客與自訂網站群組。 ✔️ 預覽版,自 2026-05-01-preview REST API 版本起提供。 需要 SharePoint 群組配置。 群組識別碼會以 spg: 為前綴輸出。
可分享的「任何人連結」或「你組織中的人連結」 組織範圍或公開存取。 ❌ 預覽版不支援。
外部/訪客使用者 賓客可進入。 ❌ 不支援。
資訊管理政策 制定政策以定義特定的權限要求。 ❌ 預覽版不支援。
Purview 靈敏度標籤 文件層級的安全保障,涵蓋隱私、分類、權限與加密 ❌ 透過另一項功能支持: 保留並尊重敏感標籤。

支持性團體關係

Microsoft Entra 群組傳遞性適用於 Microsoft Entra 內部。 它不會展開屬於 SharePoint 群組成員的 Microsoft Entra 群組。

權限關係 支援 指導
直接指派到 SharePoint 項目的使用者或 Microsoft Entra 群組 Yes 索引器將使用者或 Microsoft Entra 群組物件 ID 儲存在項目的權限元資料中。
使用者透過傳遞式 Microsoft Entra 群組巢狀結構,觸達指派的 Microsoft Entra 群組 Yes 查詢時的 Microsoft Graph 解決方案會展開使用者的傳遞式 Microsoft Entra 群組成員資格。
使用者直接指派到一個擁有該項目存取權限的 SharePoint 站點群組 Yes 設定 SharePoint 群組支援。
Microsoft Entra 群組嵌套於 SharePoint 群組 中 No SharePoint 群組 解決方案不會擴充巢狀的 Microsoft Entra 群組。 依賴此關係的結果會被過濾掉。可直接將使用者加入 SharePoint 群組,或透過支援的 Microsoft Entra 群組指派授予權限。
其他混合式 SharePoint 與 Microsoft Entra 巢狀關係指引 未具體說明 請勿根據 Microsoft Entra 的傳遞性來推斷支援性。 此預覽限制適用於 SharePoint 群組中巢狀的 Microsoft Entra 群組。

階層式權限如何被評估

SharePoint權限會繼承 Site → Library → Folder → File 的階層,除非繼承被破壞。

在擷取過程中,索引器會在每個層級收集使用者與群組識別碼(ID),並計算每個檔案的有效 ACL。

依 ACL 情境區分的權限

ACL 擷取所需的 Microsoft Entra 應用程式權限和憑證類型,取決於您要建立索引的項目類型和群組類型。 在應用程式註冊中,所有權限都會新增於 API 權限>新增權限 之下,而同盟憑證則會新增於 憑證與秘密>同盟憑證 之下。 如需逐步指示和螢幕擷取畫面,請參閱 步驟 3:建立 Microsoft Entra 應用程式註冊 和 使用受控識別設定已註冊的應用程式。

劇本 要新增的 API 權限 Credential
文件庫檔案上的 ACL,當只透過 Microsoft Entra 使用者和標準群組 (Microsoft Entra 安全性群組、Microsoft 365 群組、郵件啟用的安全性群組) 授與存取權時 Microsoft Graph:Files.Read.All,Sites.FullControl.All(或 Sites.Selected用於示波存取) 用戶端秘密或聯邦憑證
文件庫檔案上的 ACL,當也必須遵守 SharePoint 網站群組 (擁有者、成員、訪客或自訂網站群組) 時 Microsoft Graph:Files.Read.All,Sites.FullControl.All(或Sites.Selected)
SharePoint:Sites.FullControl.All(或 Sites.Selected)
聯邦資格(必備)
SharePoint 清單項目的 ACL Microsoft Graph:Files.Read.All,Sites.FullControl.All(或Sites.Selected),User.Read.All
SharePoint:Sites.FullControl.All(或 Sites.Selected)
聯邦資格(必備)
ASPX 網站頁面中的內容與存取控制清單 Microsoft Graph:Sites.FullControl.All(或 Sites.Selected)、User.Read.All(如果你同時在索引文件庫或清單,請保留上方列的 Files.Read.All)
SharePoint:Sites.FullControl.All(或 Sites.Selected)
聯邦資格(必備)
透過 sharePointConnectorAppRegistration 在查詢時解析 SharePoint 網站群組 將 SharePoint: User.Read.All 加到索引器使用的同一應用程式註冊中 聯邦資格(必備)

註

  • 當您新增權限時,您可以在兩種 API 介面之間選擇:Microsoft Graph 和 SharePoint。 兩者都提供名稱相似的權限。 例如, Sites.FullControl.All 存在於兩者之下。 在表格中標示的 API 表面下新增每個權限。

  • 每當情境新增 SharePoint API 權限時,就使用聯邦憑證。 用戶端密碼僅適用於僅限 Microsoft Graph 的文件庫資料列。

  • User.Read.All 對於清單項目和 ASPX 網站頁面是必要的,因為索引器會透過 SharePoint REST API 讀取這些權限,而 API 只會回傳使用者的電子郵件。 索引子接著會呼叫 Microsoft Graph,將每封電子郵件解析為其 Microsoft Entra 物件 ID,而該查閱需要 User.Read.All。

  • 使用 Sites.Selected 時,先明確授權應用程式對每個目標SharePoint網站的存取權限,再進行索引。

聯邦憑證是使用受信任的管理身份來驗證應用程式,而非用戶端秘密。 同一聯邦憑證同時涵蓋 SharePoint 網站群組的擷取(索引器)和查詢時的評估。 關於設定步驟,請參見 「以管理身份設定註冊應用程式」。

在啟用 ACL 攝取之前

請在您的註冊 Microsoft Entra 應用程式上完成以下步驟:

  1. 根據您計劃編製索引的內容 (文件庫檔案、清單項目、ASPX 網站頁面),以及是否必須遵守 SharePoint 網站群組,在前一個資料表中識別您的案例。
  2. 在Microsoft Entra 系統管理中心開啟你的應用程式註冊,然後到 API 權限>新增權限。
  3. 新增你情境中列出的 Microsoft Graph 權限。 授予管理員同意。
  4. 如果你的情境也需要SharePoint權限,請再次選擇 新增權限,選擇 SharePoint API,並新增 Sites.FullControl.All(或 Sites.Selected)。 授予管理員同意。
  5. 設定憑證:
    • 對於僅適用於 Microsoft Graph 的情境,您可以使用用戶端密碼(Certificates & secrets>Client secrets)或同盟憑證。
    • 對於任何包含SharePoint權限的情況,請在 Certificates & secretsFederated credentials 下新增一個聯邦憑證。 詳見 「以管理身份配置註冊應用程式」。
  6. 授權應用程式存取目標SharePoint網站(尤其重要,當你使用 Sites.Selected 作為範圍存取時),這樣它才能讀取你想要索引的內容和權限。

找到正確的 Microsoft Entra 識別碼

每個識別碼會在 Azure 入口網站的不同位置出現,並對應到特定的配置欄位。 在使用同盟認證設定 SharePoint ACL 擷取時,請將本節作為參考。 這些識別碼會在 設定 SharePoint 群組支援以及資料來源連線字串中參照。

識別碼 入口位置 使用位置 註釋
Ingestion app 應用程式(用戶端)識別碼 應用程式註冊><your-app>> ApplicationId 在資料來源連接字串中;applicationId 在 sharePointConnectorAppRegistration 此 ID 對大多數設定欄位皆為正確。 也稱為「客戶識別碼」。
應用程式物件識別碼 應用程式註冊><your-app>>概覽(見應用程式(客戶端)ID) 未在 Azure AI 搜尋服務 設定中使用 不要把它和應用程式(客戶端)ID 搞混。 它出現在同一窗格中的客戶識別碼正下方。
服務主體物件識別碼 Microsoft Entra ID>企業應用程式><your-app>>管理>屬性 未在 Azure AI 搜尋服務 設定中使用 這是該應用程式的服務主體表示形式。 這是與應用程式註冊物件 ID 不同的 GUID。
受控身份識別主體識別碼 受控身份識別資源>屬性 或搜尋服務 身份識別 窗格 不直接用於 Azure AI 搜尋服務 的資料來源或索引設定 當你在應用程式註冊中設定同盟身分識別認證時,會在內部使用。 你建立的憑證信任此身分。
聯邦憑證物件識別碼 應用程式註冊>><your-app>管理>憑證與秘密>聯邦憑證><credential-name> 未在 Azure AI 搜尋服務 設定中使用 請勿對federatedCredentialId使用同盟身分識別認證項目的 GUID。
聯邦憑證申請識別碼 系統指派:Microsoft Entra ID>企業應用程式><search-service>>屬性; 使用者指派:<managed-identity-resource>>屬性 FederatedCredentialApplicationId 在資料來源連接字串中;federatedCredentialId 在 sharePointConnectorAppRegistration 請參閱 聯邦憑證應用程式 ID 以查詢管理身份。

聯邦憑證申請識別碼

在資料來源連接字串中的 FederatedCredentialApplicationId 和索引定義中的 federatedCredentialId,請使用受控識別本身的應用程式(用戶端)ID,不要使用擷取應用程式的 ID。

系統指派的受控識別:

  1. 前往您的 Azure AI 搜尋服務 服務。
  2. 選擇 安全 + 網路>識別碼。
  3. 在 系統指派 標籤中,注意物件 (主體)ID。
  4. 前往 Microsoft Entra ID>管理>企業應用程式。
  5. 搜尋你的搜尋服務名稱,或將 物件(主體)ID 貼上到搜尋框中。
  6. 選擇結果並開啟 屬性。 複製此處顯示的應用程式 ID,其為資料來源中的 federatedCredentialId 值,以及索引中的 FederatedCredentialApplicationId 值。

使用者指派的受控識別:

  1. 前往使用者指定的管理身份資源。
  2. 選取 [設定]> [屬性]。
  3. 複製 Client ID,也就是資料來源中 federatedCredentialId 的值,以及索引中 FederatedCredentialApplicationId 的值。

設定您的搜尋服務,以支援 ACL 擷取和查詢時強制執行

這些步驟會設定您的搜尋服務以便進行 ACL 擷取,並在查詢時啟用 ACL 接受。

選擇填入 ACL 欄位的位置

ACL 元資料欄位的映射位置取決於索引器是每個來源項目寫一份文件,還是每個來源項目寫多個區塊。

劇本 透過以下方式填充 ACL 欄位 原因為何
無技能集或無分塊技能集;每個來源項目一份搜尋文件 索引器欄位對應僅適用於(metadata_user_ids → UserIds、metadata_group_ids → GroupIds,以及 SharePoint 群組的 metadata_spo_site_url → SharePointSiteUrl)。 索引器會將單一文件寫入目標索引,欄位映射則將原始元資料傳送到索引欄位。
具備分塊的技能組(例如,整合向量化的文字分割技能),單一索引,每個區塊重複父欄位(projectionMode: skipIndexingParentDocuments) 技能集中的索引投影 (從 mappings、/document/metadata_user_ids,以及 SharePoint 群組的 /document/metadata_group_ids 進行 /document/metadata_spo_site_url)。 父層文件未建立索引;只有區塊會被建立索引。 ACL 值必須投影到每個區塊上,因此查詢時過濾器會套用在結果中回傳的區塊上。 此模式下,這些欄位的索引器欄位映射會被繞過。
具備分塊、雙索引模式(父索引 + 子區塊索引)的技能組 兩者皆是:索引器欄位映射填充父索引上的 ACL 欄位,索引投影填充子區塊索引上的 ACL 欄位。 兩個索引都可以查詢,且每個索引都需要它所過濾的元資料。

在所有分塊情境中,每個分塊都必須攜帶 ACL 欄位。 權限過濾器會依文件套用,因此缺少 ACL 欄位的區塊無法回傳給正確的呼叫者。

1. 資料來源配置

本節是在基礎步驟 4:建立資料來源逐步解說之上的差異。 在indexerPermissionOptions中設定,以便從 SharePoint 文件中索引userIds和groupIds。

{
  "name": "my-sharepoint-acl-datasource",
  "type": "sharepoint",
  "indexerPermissionOptions": ["userIds", "groupIds"],
  "credentials": {
    "connectionString": "<connection-string>;"
  },
  "container": {
    "name": "<library-name>",
    "query": "<optional-folder-path>"
  }
}

2. 在索引定義中加入權限欄位

在 你的索引架構定義 中加入欄位以儲存 ACL 並支援查詢時過濾。

{
  "fields": [
    { "name": "UserIds",  "type": "Collection(Edm.String)", "permissionFilter": "userIds",  "filterable": true, "retrievable": false },
    { "name": "GroupIds", "type": "Collection(Edm.String)", "permissionFilter": "groupIds", "filterable": true, "retrievable": false }
  ],
  "permissionFilterOption": "enabled"
}

在開發期間,僅將 retrievable 屬性設為 true 以驗證數值。 你可以將可提取性由 true 更改為 false,且不需要索引重建。

3. 在你的技能組中設定指標投影(如適用)

當啟用分區時,當 projectionMode 為 skipIndexingParentDocuments時,父文件不會寫入索引。 透過 indexProjections.selectors[].mappings 將 ACL 中繼資料傳遞到每個區塊中。

如果你的索引器使用資料分塊的技能,例如啟用整合向量化時的文字分割技能,務必用索引投影將 ACL 屬性映射到每個區塊。 //以下範例中的行是說明性註解,並非有效的 JSON。 提交申請前請先移除這些資料。

PUT https://{service}.search.windows.net/skillsets/{skillset}?api-version=2026-08-01-preview
{
  "name": "my-skillset",
  "skills": [
    {
      "@odata.type": "#Microsoft.Skills.Text.SplitSkill",
      "name": "#split",
      "context": "/document",
      "inputs": [{ "name": "text", "source": "/document/content" }],
      "outputs": [{ "name": "textItems", "targetName": "chunks" }]
    }
    // ... (other skills such as embeddings, entity recognition, etc.)
  ],
  "indexProjections": {
    "selectors": [
      {
        "targetIndexName": "chunks-index",
        "parentKeyFieldName": "parentId",          // must exist in target index
        "sourceContext": "/document/chunks/*",     // match your split output path
        "mappings": [
          { "name": "chunkId",           "source": "/document/chunks/*/id" },     // if you create an id per chunk
          { "name": "content",           "source": "/document/chunks/*/text" },   // chunk text
          { "name": "parentId",          "source": "/document/id" },              // parent doc id
          { "name": "UserIds",  "source": "/document/metadata_user_ids" },
          { "name": "GroupIds",  "source": "/document/metadata_group_ids" },
          { "name": "SharePointSiteUrl", "source": "/document/metadata_spo_site_url" } // include when the index has sharePointConnectorAppRegistration (SharePoint groups support)
        ]
      }
    ],
    "parameters": {
      "projectionMode": "skipIndexingParentDocuments"
    }
  }
}

UserIds、GroupIds 和 SharePointSiteUrl 映射讀取由 SharePoint 索引器(/document/metadata_*)所發出的來源層元資料,並將值寫入每個區塊。

4. 配置索引器欄位與 ACL 的映射关系

當索引器為每個來源項目寫入一份文件(不進行分塊),或同時維護獨立的父索引和區塊索引時,請使用索引器欄位對應。 如果您的技能組使用 projectionMode: skipIndexingParentDocuments 將文件分塊到單一目標索引中,這裡顯示的欄位對應會由前一步中針對區塊索引的 indexProjections.mappings 取代。

除了你必須的 indexer 配置外,還需要將來自 SharePoint 的原始元數據 ACL 欄位映射到你的索引欄位。

{
  "fieldMappings": [
    { "sourceFieldName": "metadata_user_ids",  "targetFieldName": "UserIds" },
    { "sourceFieldName": "metadata_group_ids", "targetFieldName": "GroupIds" }
  ]
}

5. 執行索引器

索引器執行時會擷取 ACL 元資料。 在建立或更新索引器(見 步驟 6:建立索引器)後,觸發執行,讓索引器同時吸收 ACL 和內容。

POST https://[service name].search.windows.net/indexers/[indexer-name]/run?api-version=2026-08-01-preview
api-key: [admin key]

如果你在已編製索引項目的現有索引器上啟用 ACL 擷取,請使用 /resync 呼叫 options: ["permissions"],以回填這些項目的 ACL;或者使用 /resetdocs 重新擷取特定項目。

6. 驗證 ACL 擷取

確認 ACL 值已正確填入:

  1. 在你的索引定義中,暫時將 retrievable 在 true 和 UserIds 上設為 GroupIds。 更改 retrievable 不需要重新建立指數。
  2. 執行一個 提升讀取的查詢 ,選擇 UserIds 和 GroupIds,並確認集合不是空的。 對於分塊情境,請確認每個分塊同時包含兩個欄位。
  3. 驗證後,將retrievable返回至false。

設定 SharePoint 群組支援

從 2026-05-01-preview REST API 開始,SharePoint 索引器可以整合 SharePoint 網站群組成員資格(擁有者、成員、訪客及自訂網站群組)。 它會在查詢時遵守這些群組。 SharePoint 群組 ID 會在 metadata_group_ids 欄位中輸出,並加上 spg: 前綴,以便與 Microsoft Entra 群組物件 ID 區別。

此逐步解說為獨立內容:依序完成步驟以設定索引、索引子欄位對應,並使用 SharePoint 網站群組強制執行查詢索引。

以下元件協同運作以啟用 SharePoint 站點群組解析:

組件 位置 Purpose
sharePointConnectorAppRegistration(帶有 applicationId, tenantId, ) federatedCredentialId 指數定義 提供搜尋服務所需的認證設定,使搜尋服務能以呼叫使用者身份呼叫 SharePoint REST API,並在查詢時解決站點群組成員資格。
SharePointSiteUrl 欄位(包含 sharepointSiteUrl: true) 來自 metadata_spo_site_url 的索引結構描述 + 索引器欄位對應 識別文件所屬的 SharePoint 網站,確保 SharePoint 群組解析的範圍正確。
spg: 中帶有 GroupIds 前綴的值 文件權限元資料 區分 SharePoint 網站群組 ID 與 Microsoft Entra 群組物件 ID。

1.Prerequisites

註

資料連接字串中的FederatedCredentialApplicationId,以及sharePointConnectorAppRegistration中的federatedCredentialId,都使用受控識別的應用程式識別碼。 sharePointConnectorAppRegistration 中的 applicationId 屬性會使用擷取應用程式的用戶端 ID。 要找到正確的值,請參見「尋找正確的 Microsoft Entra 識別碼」。

2. 配置索引

將 sharePointConnectorAppRegistration 組態和 SharePointSiteUrl 欄位加入,並與 UserIds 和 GroupIds 權限篩選欄位並列,讓完整的索引結構集中在同一處。 保留 permissionFilterOption: "enabled"。

PUT https://{service}.search.windows.net/indexes/{index}?api-version=2026-08-01-preview
{
  "name": "my-sharepoint-acl-index",
  "sharePointConnectorAppRegistration": {
      "applicationId": "<ingestion-app-client-id>",
      "federatedCredentialId": "<managed-identity-application-id>",
     "tenantId": "<sharepoint-tenant-id>"
  },
  "fields": [
    { "name": "UserIds",           "type": "Collection(Edm.String)", "permissionFilter": "userIds",  "filterable": true, "retrievable": false },
    { "name": "GroupIds",          "type": "Collection(Edm.String)", "permissionFilter": "groupIds", "filterable": true, "retrievable": false },
    { "name": "SharePointSiteUrl", "type": "Edm.String", "sharepointSiteUrl": true, "filterable": false, "retrievable": false }
  ],
  "permissionFilterOption": "enabled"
}

3. 配置索引器欄位映射

將 SharePoint 的元資料欄位映射到單一合併映射區塊中的索引欄位。 前兩種映射與標準 ACL 擷取相同;第三個映射則啟動 SharePoint 群組解析。

{
  "fieldMappings": [
    { "sourceFieldName": "metadata_user_ids",             "targetFieldName": "UserIds" },
    { "sourceFieldName": "metadata_group_ids",            "targetFieldName": "GroupIds" },
    { "sourceFieldName": "metadata_spo_site_url",  "targetFieldName": "SharePointSiteUrl" }
  ]
}

如果您的技能組會將文件分塊(例如使用 Text Split 技能進行整合式向量化時),請改為透過 SharePointSiteUrl 將 indexProjections.mappings 投影到每個區塊。 請參閱 「選擇填入 ACL 欄位的位置」。

4. 查詢索引

用戶端不需更改。 同一個 x-ms-query-source-authorization 標記同時啟動 Microsoft Entra 和 SharePoint 站點群組強制執行。 搜尋服務會在伺服器端使用 sharePointConnectorAppRegistration 在索引上解析 SharePoint 群組成員資格。

關於要求格式,請參閱 一般查詢範例以及 SharePoint 專屬的 含有 SharePoint 網站群組強制執行的範例。

5. 驗證

要確認索引中有SharePoint 群組 ID,請執行 elevated-read查詢,選擇 GroupIds,並在回應中尋找 spg: 前綴值。

同步索引內容與來源內容之間的權限

自 2026-05-01-preview REST API 起,對於具有獨特權限的項目,ACL 變更會在每次成功執行索引器時被偵測並刷新。 索引器使用 SharePoint 變更標記,逐步接收角色分配的新增與移除,就像接收內容變更一樣。

某些情境仍然需要明確執行重新整理:

變更範圍 自動偵測 建議的動作
具有唯一權限之特定項目的權限(檔案、清單項目或頁面) Yes 不需要執行任何動作。 該變更會在索引子下次成功執行時被偵測到。
特定項目上的內容變更 (這也會重新評估該項目的有效 ACL) Yes 不需要執行任何動作。
父範圍 (網站、程式庫、清單或資料夾) 上由子項目繼承的權限變更 No 以 /resync 呼叫 options: ["permissions"],即可在整個資料來源中重新整理 ACL;或以受影響的文件鍵呼叫 /resetdocs,即可同時重新整理內容與 ACL。
已在現有索引器上啟用 ACL 擷取功能 No 呼叫 /resync,並使用 options: ["permissions"],為先前已編製索引的項目回填 ACL。

重置特定文件

您可以重設特定文件,以重新完整擷取內容與 ACL。

POST https://{service}.search.windows.net/indexers/{indexer}/resetdocs?api-version=2026-08-01-preview
{
  "documentKeys": ["doc123", "doc456"]
}

在完整資料來源中重新同步 ACL

你可以在初次擷取後 重新同步完整的 ACL 內容 。 要完全成功,此操作需要在完成後 執行索引器 。

POST https://{service}.search.windows.net/indexers/{indexer}/resync?api-version=2026-08-01-preview
{
  "options": ["permissions"]
}

重要

如果你在沒有觸發更新機制的情況下更改 SharePoint 權限,索引會提供先前已匯入檔案的過時 ACL 資料。

索引完資料和 ACL 後,你可以查詢索引。

Troubleshooting

癥狀 原因和解決方案
UserIds 或 GroupIds 在索引文件中為空 如果您的技能集使用 projectionMode: skipIndexingParentDocuments,系統會略過 ACL 欄位的索引子欄位對應。 改為在每個區塊上設定 ACL 欄位 indexProjections.mappings 。
SharePoint 站點群組 ID 缺失,或 GroupIds 值沒有 spg: 前綴 確認索引具有 sharePointConnectorAppRegistration 組態、SharePointSiteUrl 欄位存在且具有 sharepointSiteUrl: true,並且 metadata_spo_site_url 對應存在於索引子欄位對應或索引投影中。
即使 ACL 的其他部分均已正確填入,SharePointSiteUrl 在建立索引後仍為空白或 null 索引器會在 metadata_sharepoint_site_url 之下輸出這項中繼資料,而不是在 metadata_spo_site_url 之下。 確認你的索引器欄位映射是否使用 "sourceFieldName": "metadata_spo_site_url"。 如果你的技能是用索引投影來處理分塊文件,請確認投影映射來源是 /document/metadata_spo_site_url。
索引器回傳 401 或 403 在你的情境中,對 Microsoft Graph 和 SharePoint API 權限都給予管理員同意。 當情境需要時,使用聯邦憑證(非客戶端秘密)。 請參見 ACL 授權情境。
更改網站、函式庫、清單或資料夾 ACL 後,權限就會失效 呼叫 /resync,並使用 options: ["permissions"]。 請參閱 索引與來源內容間的同步權限 以獲取相關資訊。
設定 federatedCredentialId 時,sharePointConnectorAppRegistration 遭到拒絕 請使用受管理身份的應用程式 ID,而非聯邦身份憑證的物件 ID 或受管理身份的主體 ID。 請參閱 聯邦憑證申請ID。
索引器會傳回 401 Unauthorized,並將 FederatedCredentialApplicationId 設為已設定 請確認您使用的是受控識別的應用程式 ID(可在 企業應用程式 中找到),而不是擷取應用程式的「應用程式(用戶端)ID」(ApplicationId) 或任何物件 ID。 對於使用者指派的管理身份,請使用該管理身份資源的屬性頁面中的客戶端 ID。 請參閱「尋找正確的 Microsoft Entra 識別碼」。

如需了解在 ACL 中繼資料建立索引後查詢時遺失、非預期或失敗的結果,請參閱 疑難排解 SharePoint 權限篩選。