View a markdown version of this page

为 OAuth 2.0 身份验证设置 OneDrive - Amazon Bedrock

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

为 OAuth 2.0 身份验证设置 OneDrive

OAuth 2.0 身份验证 (OAUTH2) 使用应用程序客户端 ID 和密钥以及委托的刷新令牌进行身份验证。连接器使用刷新令牌来获取访问令牌,这些令牌用于在登录用户的委托上下文中抓取内容。数据源涵盖用户可以访问的 OneDrive 内容——他们自己的云端硬盘,以及与他们共享的任何云端硬盘或他们拥有 SharePoint 管理员访问权限的地方。已登录用户无法访问的驱动器会被静默跳过。

重要

我们建议设置 Microsoft Entra 应用程序 ID 身份验证 OneDrive大多数数据源使用。OAuth 2.0 身份验证有以下限制:

  • 它仅抓取登录用户可以访问的 OneDrive 内容(他们自己的云端硬盘,以及与他们共享的任何云端硬盘或他们拥有 SharePoint 管理员访问权限的地方)。用户无法访问的驱动器会被静默跳过。要统一抓取租户 OneDrive 中的每个用户,请使用 Microsoft Entra 应用程序 ID 身份验证。

  • 它需要刷新令牌,您可以通过一次性用户登录获得刷新令牌(步骤 4)。

  • 刷新令牌的 Microsoft-side 生命周期是有限的。当刷新令牌过期或被撤销时,同步将失败,直到您获取新令牌并更新密钥。

  • 它不支持文档级访问控制 (ACL)。要按用户权限筛选查询结果,请使用 Microsoft Entra 应用程序 ID 身份验证。

先决条件

  • Microsoft Entra ID 管理员访问权限,用于注册应用程序、授予管理员同意和创建客户端密钥。

  • 一个可以访问你想要抓取的 OneDrive 内容的 Microsoft 365 用户帐户。您以该用户身份登录一次即可获得刷新令牌。

  • 获取您的 Microsoft 365 租户 ID。

第 1 步:在 Microsoft Entra ID 中注册应用程序

  1. 登录 Microsoft Entra 管理中心

  2. 在左侧导航栏中,展开 Entra ID,然后选择应用程序注册

  3. 选择 “新注册”。

  4. 在 “名称” 中,输入描述性名称,例如。bedrock-onedrive-oauth2

  5. 对于支持的帐户类型,请选择 “仅限此组织目录中的帐户(单租户)”。

  6. 在 “重定向 URI” 下,选择 Web 作为平台并输入http://localhost:53672/callback。在步骤 4 中获取刷新令牌时,您可以使用此重定向 URI。您可以使用任何免费的 localhost 端口;如果您在此处更改端口,请在步骤 4 中使用相同的端口。

  7. 选择注册

  8. 在应用程序概述页面上,记录应用程序(客户端)ID目录(租户)ID

第 2 步:添加 API 权限并授予管理员同意

OAuth 2.0 身份验证使用委托登录,因此应用程序需要委托权限,而不是应用程序权限。

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

  2. 选择 Microsoft Graph,然后选择委托权限

  3. 选择以下委派权限,然后选择添加权限

    • Files.Read.All— 读取用户可以访问的文件。

    • Sites.Read.All— 阅读用户可以访问的 OneDrive 站点。

    • User.Read.All— 识别用户。

    • offline_access— 必填项,因此登录会返回刷新令牌。

  4. API 权限页面上,选择 [您的组织] 授予管理员同意并确认。

步骤 3:创建客户机密钥

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

  2. 输入描述,选择到期时间,然后选择添加

  3. 立即记录秘密 ——它只显示一次。记录,而不是秘密 ID

步骤 4:获取刷新令牌

连接器需要刷新令牌,您可以通过一次性用户登录获得该令牌。以下步骤使用带有本地主机重定向的 OAuth 2.0 授权代码流,适用于具有多重身份验证 (MFA) 的用户。对于非 MFA 服务账户,最后提供了一种更简单的替代方案。

授权码流程(推荐)

  1. 生成登录网址。将占位符替换为您的租户 ID 和步骤 1 中的应用程序(客户端)ID。如果您在步骤 1 中使用了不同的本地主机端口,请更新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
  2. 登录。在浏览器中打开网址,然后以你希望连接器使用其访问权限的 Microsoft 365 用户身份登录。完成任何 MFA 挑战。

    然后,浏览器会重定向到 localhost URL,该网址不会加载(这是预料之中的,因为该端口上没有任何东西在监听)。浏览器地址栏现在包含重定向 URI 后跟一个code参数,例如:http://localhost:53672/callback?code=0.AXoA...&session_state=...

  3. 复制授权码。从地址栏中复制code参数的值(介于code=和下一个之间的所有值&)。该代码在几分钟内有效;请立即完成步骤 4。

  4. 用代码兑换刷新令牌。将占位符替换为您的租户 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 密钥

使用以下键值对将凭证存储在 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字段。如果您没有及时更新密钥,则同步会失败,并出现令牌刷新错误,直到您这样做。

后续步骤

存储密钥后,在authType设置为的情况下创建数据源OAUTH2。您没有为此方法提供证书。请参阅Connect OneDrive 数据源