

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定 OneDrive 的 OAuth 2.0 身分驗證
<a name="kb-managed-onedrive-oauth2-setup"></a>

OAuth 2.0 身分驗證 (`OAUTH2`) 會使用應用程式用戶端 ID 和秘密以及委派的**重新整理字符**進行身分驗證。連接器使用重新整理權杖來取得存取權杖，以在登入使用者的委派內容中編目內容。資料來源涵蓋使用者可以存取的 OneDrive 內容：他們自己的磁碟機，以及與他們共用的任何磁碟機，或是他們有權存取 SharePoint 管理員的位置。以無提示方式略過登入使用者無法存取的磁碟機。

**重要**  
我們建議[設定 OneDrive 的 Microsoft Entra App ID 身分驗證](kb-managed-onedrive-entra-setup.md)大多數資料來源使用 。OAuth 2.0 身分驗證有下列限制：  
它只會編目登入使用者可存取的 OneDrive 內容 （他們自己的磁碟機，以及與他們共用的任何磁碟機，或是他們具有 SharePoint 管理員存取權的位置）。系統會以無提示方式略過使用者無法存取的磁碟機。若要統一地抓取租用戶中每個使用者的 OneDrive，請使用 Microsoft Entra App ID 身分驗證。
它需要重新整理字符，您可以透過一次性使用者登入取得 （步驟 4)。
重新整理權杖的 Microsoft 端生命週期有限。當重新整理權杖過期或撤銷時，同步會失敗，直到您取得新的權杖並更新秘密為止。
它不支援文件層級存取控制 (ACLs)。若要依使用者許可篩選查詢結果，請使用 Microsoft Entra App ID 身分驗證。

## 先決條件
<a name="kb-managed-onedrive-oauth2-prereqs"></a>
+ Microsoft Entra ID 管理員存取以註冊應用程式、授予管理員同意，以及建立用戶端秘密。
+ 可存取您要編目之 OneDrive 內容的 Microsoft 365 使用者帳戶。您以此使用者身分登入一次，以取得重新整理字符。
+ 您的 Microsoft 365 租用戶 ID。

## 步驟 1：在 Microsoft Entra ID 中註冊應用程式
<a name="kb-managed-onedrive-oauth2-step1"></a>

1. 登入 [Microsoft Entra 管理中心](https://entra.microsoft.com/)。

1. 在左側導覽中，展開 **Entra ID**，然後選擇**應用程式註冊**。

1. 選擇**新增註冊**。

1. 針對**名稱**，輸入描述性名稱，例如 `bedrock-onedrive-oauth2`。

1. 對於**支援的 帳戶類型**，**僅選取此組織目錄中的帳戶 （單一租戶）**。

1. 在**重新導向 URI** 下，選取 **Web** 做為平台，然後輸入 `http://localhost:53672/callback`。當您在步驟 4 中取得重新整理權杖時，您會使用此重新導向 URI。您可以使用任何免費的 localhost 連接埠；如果您在此處變更連接埠，請使用步驟 4 中的相同連接埠。

1. 選擇**註冊**。

1. 在應用程式**概觀**頁面上，記錄**應用程式 （用戶端） ID** 和**目錄 （租戶） ID**。

## 步驟 2：新增 API 許可並授予管理員同意
<a name="kb-managed-onedrive-oauth2-step2"></a>

OAuth 2.0 身分驗證使用委派的登入，因此應用程式需要**委派**的許可，而不是應用程式許可。

1. 在您的應用程式註冊中，選擇 **API 許可**，然後選擇**新增許可**。

1. 選擇 **Microsoft Graph**，然後選擇**委派許可**。

1. 選取下列委派許可，然後選擇**新增許可**：
   + `Files.Read.All` — 讀取使用者可存取的檔案。
   + `Sites.Read.All` — 讀取使用者可以存取的 OneDrive 網站。
   + `User.Read.All` — 識別使用者。
   + `offline_access` — 必要，因此登入會傳回重新整理字符。

1. 在 **API 許可**頁面上，選擇**授予 【您的組織】 的管理員同意**並確認。

## 步驟 3：建立用戶端秘密
<a name="kb-managed-onedrive-oauth2-step3"></a>

1. 在您的應用程式註冊中，選擇**憑證和秘密**，然後選擇**用戶端秘密**，然後選擇**新用戶端秘密**。

1. 輸入描述，選擇過期，然後選擇**新增**。

1. 立即記錄秘密**值** — 只會顯示一次。記錄 **值**，而不是**秘密 ID**。

## 步驟 4：取得重新整理權杖
<a name="kb-managed-onedrive-oauth2-step4"></a>

連接器需要重新整理字符，您可以透過一次性使用者登入取得。以下程序使用 OAuth 2.0 授權碼流程搭配 localhost 重新導向，適用於具有多重驗證 (MFA) 的使用者。對於非 MFA 服務帳戶，會在結尾提供更簡單的替代方案。

**授權碼流程 （建議）**

1. **建置登入 URL。**將預留位置取代為您的租戶 ID 和步驟 1 的應用程式 （用戶端） ID。如果您在步驟 1 中使用不同的 localhost 連接埠，請更新 `redirect_uri`以符合。

   ```
   https://login.microsoftonline.com/{{TENANT_ID}}/oauth2/v2.0/authorize?client_id={{CLIENT_ID}}&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A53672%2Fcallback&response_mode=query&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default%20offline_access
   ```

1. **登入。**在瀏覽器中開啟 URL，並以您希望連接器使用其存取權的 Microsoft 365 使用者身分登入。完成任何 MFA 挑戰。

   然後，瀏覽器會重新導向至未載入的 localhost URL （這是預期的，因為沒有接聽該連接埠）。瀏覽器地址列現在包含重新導向 URI，後面接著`code`參數，例如：`http://localhost:53672/callback?code=0.AXoA...&session_state=...`。

1. **複製授權碼。**從地址列複製 `code` 參數的值 （介於 `code=`和下一個 之間的所有項目`&`)。程式碼有效時間為幾分鐘；立即完成步驟 4。

1. **交換程式碼以取得重新整理權杖。**將預留位置取代為您的租戶 ID、應用程式 （用戶端） ID、步驟 3 的用戶端秘密，以及您剛複製的授權碼。

   ```
   curl -s -X POST \
     "https://login.microsoftonline.com/{{TENANT_ID}}/oauth2/v2.0/token" \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -d "grant_type=authorization_code" \
     -d "client_id={{CLIENT_ID}}" \
     -d "client_secret={{CLIENT_SECRET}}" \
     -d "code={{AUTHORIZATION_CODE}}" \
     -d "redirect_uri=http://localhost:53672/callback" \
     -d "scope=https://graph.microsoft.com/.default offline_access"
   ```

   回應包含 `refresh_token`。記錄步驟 5。

**資源擁有者密碼登入資料 （非 MFA 服務帳戶的替代方案）**

如果您的帳戶不需要 MFA，而且不受強制執行互動式登入的條件式存取政策約束，您可以略過瀏覽器流程，並直接將使用者的登入資料交換為重新整理字符。將預留位置取代為您的值，包括使用者的 UPN 和密碼。

```
curl -s -X POST \
  "https://login.microsoftonline.com/{{TENANT_ID}}/oauth2/v2.0/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=password" \
  -d "client_id={{CLIENT_ID}}" \
  -d "client_secret={{CLIENT_SECRET}}" \
  -d "username={{USER_UPN}}" \
  -d "password={{USER_PASSWORD}}" \
  -d "scope=https://graph.microsoft.com/.default offline_access"
```

回應包含 `refresh_token`。記錄步驟 5。此流程不適用於強制執行 MFA 的帳戶；請改用上方的授權碼流程。

## 步驟 5：建立 Secrets Manager 秘密
<a name="kb-managed-onedrive-oauth2-step5"></a>

使用下列鍵值對將登入資料存放在 AWS Secrets Manager 秘密中：
+ `clientId` — 步驟 1 中的應用程式 （用戶端） ID。
+ `clientSecret` — 步驟 3 中的用戶端秘密值。
+ `refreshToken` — 步驟 4 的重新整理權杖。

```
{
    "clientId": "{{your-client-id}}",
    "clientSecret": "{{your-client-secret}}",
    "refreshToken": "{{your-refresh-token}}"
}
```

使用 建立秘密 AWS Command Line Interface：

```
aws secretsmanager create-secret \
  --name {{bedrock-onedrive-oauth2-creds}} \
  --secret-string file://secret.json
```

從回應記錄秘密 ARN。您可以使用它做為資料來源 `secretArn`。

**注意**  
`OAUTH2` 連接器會從秘密讀取重新整理字符一次，並在每次同步時重複使用它 — 它不會儲存 Microsoft 傳回的輪換值。計劃在現有重新整理權杖過期之前，挖掘新的重新整理權杖 （步驟 4) 並更新秘密中的 `refreshToken` 欄位。如果您未及時更新秘密，同步會失敗並出現字符重新整理錯誤，直到您更新為止。

## 後續步驟
<a name="kb-managed-onedrive-oauth2-next"></a>

存放秘密之後，請建立將 `authType` 設為 的資料來源`OAUTH2`。您不提供此方法的憑證。請參閱[連接 OneDrive 資料來源](kb-managed-ds-onedrive-connect.md)。