本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 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 中注册应用程序
-
在左侧导航栏中,展开 Entra ID,然后选择应用程序注册。
-
选择 “新注册”。
-
在 “名称” 中,输入描述性名称,例如。
bedrock-onedrive-oauth2 -
对于支持的帐户类型,请选择 “仅限此组织目录中的帐户(单租户)”。
-
在 “重定向 URI” 下,选择 Web 作为平台并输入
http://localhost:53672/callback。在步骤 4 中获取刷新令牌时,您可以使用此重定向 URI。您可以使用任何免费的 localhost 端口;如果您在此处更改端口,请在步骤 4 中使用相同的端口。 -
选择注册。
-
在应用程序概述页面上,记录应用程序(客户端)ID 和目录(租户)ID。
第 2 步:添加 API 权限并授予管理员同意
OAuth 2.0 身份验证使用委托登录,因此应用程序需要委托权限,而不是应用程序权限。
-
在您的应用程序注册中,选择 API 权限,然后选择添加权限。
-
选择 Microsoft Graph,然后选择委托权限。
-
选择以下委派权限,然后选择添加权限:
Files.Read.All— 读取用户可以访问的文件。Sites.Read.All— 阅读用户可以访问的 OneDrive 站点。User.Read.All— 识别用户。offline_access— 必填项,因此登录会返回刷新令牌。
-
在 API 权限页面上,选择 [您的组织] 授予管理员同意并确认。
步骤 3:创建客户机密钥
-
在应用程序注册中,选择证书和密钥,然后选择客户端密钥,然后选择新客户机密。
-
输入描述,选择到期时间,然后选择添加。
-
立即记录秘密值 ——它只显示一次。记录值,而不是秘密 ID。
步骤 4:获取刷新令牌
连接器需要刷新令牌,您可以通过一次性用户登录获得该令牌。以下步骤使用带有本地主机重定向的 OAuth 2.0 授权代码流,适用于具有多重身份验证 (MFA) 的用户。对于非 MFA 服务账户,最后提供了一种更简单的替代方案。
授权码流程(推荐)
-
生成登录网址。将占位符替换为您的租户 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 -
登录。在浏览器中打开网址,然后以你希望连接器使用其访问权限的 Microsoft 365 用户身份登录。完成任何 MFA 挑战。
然后,浏览器会重定向到 localhost URL,该网址不会加载(这是预料之中的,因为该端口上没有任何东西在监听)。浏览器地址栏现在包含重定向 URI 后跟一个
code参数,例如:http://localhost:53672/callback?code=0.AXoA...&session_state=...。 -
复制授权码。从地址栏中复制
code参数的值(介于code=和下一个之间的所有值&)。该代码在几分钟内有效;请立即完成步骤 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 \ --namebedrock-onedrive-oauth2-creds\ --secret-string file://secret.json
记录响应中的秘密 ARN。您可以将其用作数据源secretArn。
注意
OAUTH2连接器从你的密钥中读取一次刷新令牌,并在每次同步时重复使用它,它不会保存 Microsoft 返回的轮换值。计划铸造一个新的刷新令牌(步骤 4),并在现有刷新令牌到期之前更新密钥中的refreshToken字段。如果您没有及时更新密钥,则同步会失败,并出现令牌刷新错误,直到您这样做。
后续步骤
存储密钥后,在authType设置为的情况下创建数据源OAUTH2。您没有为此方法提供证书。请参阅Connect OneDrive 数据源。