

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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 認証を使用します。
これには、1 回限りのユーザーサインイン (ステップ 4) を通じて取得する更新トークンが必要です。
更新トークンの Microsoft 側の有効期間は限られています。更新トークンの有効期限が切れるか取り消されると、新しいトークンを取得してシークレットを更新するまで同期は失敗します。
ドキュメントレベルのアクセスコントロール (ACLs) はサポートされていません。ユーザーアクセス許可でクエリ結果をフィルタリングするには、Microsoft Entra App ID 認証を使用します。

## 前提条件
<a name="kb-managed-onedrive-oauth2-prereqs"></a>
+ Microsoft Entra ID 管理者は、アプリケーションを登録し、管理者の同意を付与し、クライアントシークレットを作成します。
+ クロールする OneDrive コンテンツにアクセスできる Microsoft 365 ユーザーアカウント。更新トークンを取得するには、このユーザーとして 1 回サインインします。
+ 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. **[New registration]** (新規登録) を選択します。

1. Name には****、 などのわかりやすい名前を入力します`bedrock-onedrive-oauth2`。

1. **サポートされるアカウントタイプ**では、**この組織ディレクトリのアカウントのみ (単一テナント)** を選択します。

1. **リダイレクト URI **で、プラットフォームとして **Web** を選択し、 と入力します`http://localhost:53672/callback`。このリダイレクト URI は、ステップ 4 で更新トークンを取得するときに使用します。任意の無料の 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. シークレット**値** をすぐに記録します。1 回だけ表示されます。**シークレット ID** ではなく、 **値**を記録します。

## ステップ 4: 更新トークンを取得する
<a name="kb-managed-onedrive-oauth2-step4"></a>

コネクタには、1 回限りのユーザーサインインを通じて取得する更新トークンが必要です。以下の手順では、多要素認証 (MFA) を使用するユーザーに対して機能する localhost リダイレクトで OAuth 2.0 認可コードフローを使用します。MFA 以外のサービスアカウントの場合、最後により簡単な代替手段が提供されます。

**認可コードフロー (推奨)**

1. **サインイン URL を構築します。**プレースホルダーを、ステップ 1 のテナント ID とアプリケーション (クライアント) 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` コネクタは、シークレットから更新トークンを 1 回読み取り、同期ごとに再利用します。Microsoft が返すローテーションされた値は保存されません。新しい更新トークン (ステップ 4) を作成し、既存の更新トークンの有効期限が切れる前にシークレットの `refreshToken`フィールドを更新する計画を立てます。シークレットを時間内に更新しない場合、同期はトークン更新エラーで失敗します。

## 次の手順
<a name="kb-managed-onedrive-oauth2-next"></a>

シークレットを保存したら、 を `authType`に設定してデータソースを作成します`OAUTH2`。このメソッドの証明書を提供しません。「[OneDrive データソースを接続する](kb-managed-ds-onedrive-connect.md)」を参照してください。