

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为 OAuth 2.0 身份验证设置 SharePoint
<a name="kb-managed-sharepoint-oauth2-setup"></a>

OAuth 2.0 身份验证 (`OAUTH2_APP`) 使用 OAuth 2.0 资源所有者密码凭证 (ROPC) 流程，使用应用程序客户端 ID 和密码以及 Microsoft 365 用户帐户的用户名和密码进行身份验证。连接器以该用户的身份登录以阅读内容。

**重要**  
我们建议[设置 Microsoft Entra ID App-Only 身份验证用于 SharePoint](kb-managed-sharepoint-entra-setup.md)改用。OAuth 2.0 身份验证有两个限制：  
由于它使用用户名和密码登录，因此无法完成多因素身份验证 (MFA) 质询，也无法满足需要多因素身份验证 (MFA) 的条件访问策略。如果账户强制执行 MFA 或条件访问，则身份验证失败且数据源无法同步。许多组织要求您在此处使用的账户类型使用 MFA。
它不支持文档级访问控制 (ACL)。要按用户权限筛选查询结果，请使用 Microsoft Entra ID App-Only 身份验证。

## 先决条件
<a name="kb-managed-sharepoint-oauth2-prereqs"></a>
+ 一个 Microsoft 365 用户帐户，连接器使用其用户名和密码进行登录。该账户必须有权访问您要抓取的 SharePoint 网站，并且登录时不得需要 MFA 或条件访问权限。
+ Microsoft Entra ID 管理员访问权限，用于注册应用程序和创建客户机密钥。
+ 获取您的 Microsoft 365 租户 ID。

## 第 1 步：在 Microsoft Entra ID 中注册应用程序
<a name="kb-managed-sharepoint-oauth2-step1"></a>

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

1. 在左侧导航栏中，展开 **Entra ID**，然后选择**应用程序注册**。

1. 选择 “**新注册**”。

1. 在 “**名称**” 中，输入描述性名称，例如。`bedrock-sharepoint-oauth2`

1. 对于**支持的帐户类型**，请选择 “**仅限此组织目录中的帐户（单租户）**”。

1. 将 “**重定向 URI**” 留空，然后选择 “**注册**”。

1. 在应用程序**概述**页面上，记录**应用程序（客户端）ID** 和**目录（租户）ID**。

## 第 2 步：添加 API 权限并授予管理员同意
<a name="kb-managed-sharepoint-oauth2-step2"></a>

OAuth 2.0 身份验证需要两个权限：枚举网站的 Microsoft Graph 应用程序权限和读取内容的 SharePoint 委托权限。分配以下两项。


**OAuth 2.0 身份验证的权限**  

| API | 权限 | Type | 用途 | 
| --- | --- | --- | --- | 
| Microsoft Graph | Sites.Read.All | 应用程序 | 枚举 SharePoint 站点。 | 
| SharePoint | AllSites.Read | 已委托 | 通过 SharePoint REST API 阅读网站内容。需要管理员同意（参见以下注释）。 | 

1. 在您的应用程序注册中，选择 **API 权限**，然后选择**添加权限**。

1. 选择 **Microsoft Graph**，然后选择**应用程序权限**。搜索并选择`Sites.Read.All`，然后选择**添加权限**。

1. 再次选择 “**添加权限”**。选择 **SharePoint**（在 **Microsoft API** 下），然后选择 “**委托权限”**。选择`AllSites.Read`（阅读所有网站集中的项目），然后选择**添加权限**。

1. 在 **API 权限**页面上，选择 **[您的组织] 授予管理员同意**，然后确认。

**重要**  
即使 Entra 门户显示**需要管理员同意，您也必须授予管理员同意：对于 SharePoint `AllSites.Read`委托的权限，否**。**该列表示用户通常可以在交互式登录期间进行同意，但资源所有者密码凭证流程没有交互界面，因此无法在登录时获得同意，并且必须在 [您的组织] 授予管理员同意的情况下在组织范围内预先授予权限。**如果没有它， SharePoint 令牌请求就会失败`AADSTS65001`（用户或管理员未同意使用该应用程序），并且数据源无法同步。

**注意**  
如果您的租户启用了安全默认设置，则资源所有者密码凭证流可能会被阻止。您可能需要管理员来调整租户的安全默认设置或条件访问策略，以便此处使用的帐户无需MFA即可登录。有关更多信息，请参阅 Microsoft 关于[安全默认设置](https://learn.microsoft.com/en-us/entra/fundamentals/security-defaults)的文档。

## 步骤 3：创建客户机密钥
<a name="kb-managed-sharepoint-oauth2-step3"></a>

1. 在应用程序注册中，选择**证书和密钥**，然后选择**客户端密钥**，然后选择**新客户机密**。

1. 输入描述，选择到期时间，然后选择**添加**。

1. 立即记录秘密**值** ——它只显示一次。记录**值**，而不是**秘密 ID**。

## 第 4 步：创建 Secrets Manager 密钥
<a name="kb-managed-sharepoint-oauth2-step4"></a>

使用以下键值对将凭证存储在 AWS Secrets Manager 密钥中：
+ `clientId`— 步骤 1 中的应用程序（客户端）ID。
+ `clientSecret`— 步骤 3 中的客户机密值。
+ `userName`— 微软 365 用户帐户的用户名 (UPN)。
+ `password`— 该帐户的密码。

```
{
    "clientId": "{{your-client-id}}",
    "clientSecret": "{{your-client-secret}}",
    "userName": "{{user@yourdomain.onmicrosoft.com}}",
    "password": "{{your-account-password}}"
}
```

使用以下命令创建密钥 AWS Command Line Interface：

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

记录响应中的秘密 ARN。您可以将其用作数据源`secretArn`。

**注意**  
账户密码存储在密钥中，用于每次同步。如果密码更改，请更新密码。由于连接器使用此帐户登录，因此请将该密钥视为高度敏感并限制对其的访问。

## 问题排查
<a name="kb-managed-sharepoint-oauth2-troubleshooting"></a>

如果数据源无法同步，请将错误与以下签名进行匹配。


**OAuth 2.0 同步错误**  

| 错误 | 原因和解决方案 | 
| --- | --- | 
| AADSTS65001（用户或管理员未同意使用该应用程序） |  SharePoint AllSites.Read委派的权限未获得管理员同意。在您的应用程序注册中，选择 API 权限，然后为 [您的组织] 授予管理员同意。参见步骤 2。 | 
| Rest API token request failed with status: 400 | 资源所有者密码凭证在身份验证时登录失败，这通常是因为该账户需要 MFA 或流程无法满足的条件访问策略。使用不需要 MFA 的账户，并确认密钥password中的userName和正确无误。 | 
| SharePoint app is missing required scopes | 尚未授予（或同意）Microsoft Graph Sites.Read.All 应用程序权限。在抓取之前，连接器会检查该作用域的 Graph 应用程序令牌。添加 Microsoft Graph Sites.Read.All 应用程序权限并授予管理员同意。参见步骤 2。 | 

## 后续步骤
<a name="kb-managed-sharepoint-oauth2-next"></a>

存储密钥后，在`authType`设置为的情况下创建数据源`OAUTH2_APP`。您没有为此方法提供证书。请参阅[Connect SharePoint 数据源](kb-managed-ds-sharepoint-connect.md)。