为 SharePoint 数据导入配置 OAuth M2M

重要

托管 SharePoint 连接器处于 Beta 版中。 工作区管理员可以从 预览 页控制对此功能的访问。 请参阅 管理 Azure Databricks 预览版

重要

M2M OAuth for SharePoint 为公共预览版。

了解如何为 SharePoint 引入到 Azure Databricks 配置 OAuth 计算机到计算机 (M2M) 身份验证。

我应使用哪个权限模型?

M2M 身份验证支持 Microsoft Azure 中的以下权限模型:

  • Sites.Read.All:授予对组织中所有 SharePoint 网站的访问权限。 此选项的设置步骤较少,但提供更广泛的访问权限。
  • Sites.Selected:仅授予对特定 SharePoint 网站的访问权限。 这需要额外的配置,但遵循最低特权原则。

Databricks 建议尽可能使用 Sites.Selected ,以限制服务主体仅访问需要引入的站点。

先决条件

  • Microsoft Entra ID 租户中的管理员权限。

Sites.Read.All 权限

此选项授予服务主体对组织内所有 SharePoint 网站的访问权限。

步骤 1:获取 SharePoint 网站 ID

  1. 在浏览器中访问所需的 SharePoint 网站。
  2. /_api/site/id 附加到该 URL。
  3. 键入 Enter

步骤 2:获取 SharePoint 驱动器名称(可选)

如果要在 SharePoint 网站中引入所有驱动器和文档,请跳过此步骤。 如果只想引入驱动器的子集,则必须收集其名称。

驱动器名称在左侧菜单中列出。 每个网站都有一个名为 “文档 ”的默认驱动器。 但是,你的组织可能具有其他驱动器。 例如,以下屏幕截图中的驱动器包括doclib1subsite1doclib1,等等。

查看 SharePoint 驱动器

某些驱动器可能会被隐藏在列表中。 驱动器创建者可以在驱动器设置中配置此设置。 在这种情况下,“ 网站内容” 部分可能会显示隐藏的驱动器。

查看隐藏的 SharePoint 驱动器

步骤 3:创建Microsoft Entra ID 应用程序

此步骤创建一个应用程序注册,该注册可以使用服务主键访问 SharePoint 文件。

  1. 在 Microsoft Azure 门户(https://portal.azure.com)中,单击 Microsoft Entra ID。 可能需要搜索“Microsoft Entra ID”。

    Azure 门户:Entra ID 卡

  2. 在左侧边栏中的“ 管理 ”部分下,单击 “应用注册”。

  3. 单击“新建注册”。

    Entra ID 应用的新注册按钮

  4. “注册应用程序” 窗体中,指定以下内容:

    • 应用程序的名称(例如,“Databricks SharePoint 引入”)。
    • 是否希望其他租户访问此应用程序。

    无需为 M2M 身份验证指定重定向 URL。

  5. 单击“注册”。 你将被重定向到应用详细信息页。

  6. 记下以下值:

    • 应用程序(客户端)ID
    • 目录(租户)ID
  7. 单击 “客户端凭据:添加证书或机密”。

  8. 单击“+ 新建客户端密码”。

    + 新建客户端机密按钮

  9. 添加说明。

  10. 单击 添加。 此时会显示更新的客户端机密列表。

  11. 复制客户端机密值并安全地存储它。 离开页面后,无法访问客户端密码。

步骤 4:配置 API 权限

向应用程序授予读取 SharePoint 文件所需的权限。

  1. 在应用注册页中,单击左侧菜单中的 API 权限

  2. 单击“ + 添加权限”。

  3. “请求 API 权限 ”面板中,单击 Microsoft Graph

  4. 单击“ 应用程序权限”。

  5. 搜索并选择以下权限:

    • Sites.Read.All
    • Files.Read.All
  6. 单击“添加权限”。

  7. 单击 “授予[组织]的管理员同意”。

  8. 单击“ ”以确认。

    权限列表在 “状态 ”列中显示一个绿色复选标记,指示已授予管理员同意。

步骤 5:在 Azure Databricks 中创建连接

  1. 在 Catalog Explorer 中,单击左侧菜单中的 外部数据

  2. 单击“ 创建连接”。

  3. “创建连接 ”对话框中,指定以下内容:

    • 连接名称:连接的唯一名称
    • 连接类型:Microsoft SharePoint
    • 身份验证类型:OAuth 机器对机器
    • 客户端 ID:步骤 3 中的应用程序(客户端)ID
    • 客户端密码:步骤 3 中的客户端机密值
    • :SharePoint 域格式 https://YOURINSTANCE.sharepoint.com
    • 租户 ID:步骤 3 中的租户 ID
  4. 单击 “创建”

Sites.Selected 权限

此选项仅限制服务主体对特定 SharePoint 网站的访问。

步骤 1-3:完成基本设置

按照本节中的Sites.Read.All步骤 1-3 进行作。 对于这两个权限模型,这些步骤都是相同的。

  1. 获取 SharePoint 网站 ID。
  2. 获取 SharePoint 驱动器名称(可选)。
  3. 创建Microsoft Entra ID 应用程序。

步骤 4:配置 API 权限 Sites.Selected

授予应用程序限制的权限,这些权限需要其他特定于站点的授权。

  1. 在应用注册页中,单击左侧菜单中的 API 权限

  2. 单击“ + 添加权限”。

  3. “请求 API 权限 ”面板中,单击 Microsoft Graph

  4. 单击“ 应用程序权限”。

  5. 搜索并选择 Sites.Selected

  6. 单击“添加权限”。

  7. 单击 “授予[组织]的管理员同意”。

    此步骤需要Microsoft Entra ID 租户中的管理员权限。

  8. 单击“ ”以确认。

    权限列表在 “状态 ”列中显示一个绿色复选标记,指示已授予管理员同意。

步骤 4b:授予特定于网站的权限

在 Azure 中配置 Sites.Selected 后,必须显式授予应用程序对特定 SharePoint 网站的访问权限。 可以使用 Microsoft Graph 资源管理器或 Python 笔记本执行此作。

Microsoft Graph 资源管理器

  1. 转到 Microsoft Graph Explorer

  2. 使用具有 SharePoint 网站的管理员权限的帐户登录。

  3. 单击“ 修改权限 ”并同意所需的权限(Sites.FullControl.All)。

  4. 将 HTTP 方法更改为 POST

  5. 输入以下 URL,并将其中的 {site_id} 替换为步骤 1 中的 SharePoint 网站 ID:

    https://graph.microsoft.com/v1.0/sites/{site_id}/permissions
    
  6. “请求正文 ”部分中,粘贴以下 JSON,替换占位符值:

    {
      "roles": ["read"],
      "grantedToIdentities": [
        {
          "application": {
            "id": "<YOUR_CLIENT_ID>",
            "displayName": "<YOUR_APP_NAME>"
          }
        }
      ]
    }
    

    替换为:

    • <YOUR_CLIENT_ID>:步骤 3 中的应用程序(客户端)ID
    • <YOUR_APP_NAME>:应用程序注册的名称
  7. 单击“运行查询”

    成功的响应指示已授予权限。

Python 笔记本

  1. 在 Azure Databricks 工作区中创建新笔记本。

  2. 通过在单元格中运行以下命令安装 MSAL 库:

    %pip install msal
    
  3. 在新单元格中,粘贴以下代码并替换占位符值:

    import msal
    import requests
    
    # Configuration - Replace these values
    TENANT_ID = "<YOUR_TENANT_ID>"  # Directory (tenant) ID from Step 3
    ADMIN_CLIENT_ID = "<ADMIN_CLIENT_ID>"  # Client ID of an app with admin consent
    ADMIN_CLIENT_SECRET = "<ADMIN_CLIENT_SECRET>"  # Client secret of admin app
    TARGET_APP_CLIENT_ID = "<TARGET_CLIENT_ID>"  # Client ID from Step 3
    TARGET_APP_DISPLAY_NAME = "<TARGET_APP_NAME>"  # Name of your app
    SITE_ID = "<YOUR_SITE_ID>"  # SharePoint site ID from Step 1
    
    # Authenticate using MSAL
    authority = f"https://login.microsoftonline.com/{TENANT_ID}"
    app = msal.ConfidentialClientApplication(
        ADMIN_CLIENT_ID,
        authority=authority,
        client_credential=ADMIN_CLIENT_SECRET
    )
    
    # Acquire token
    token_result = app.acquire_token_for_client(
        scopes=["https://graph.microsoft.com/.default"]
    )
    
    if "access_token" in token_result:
        access_token = token_result["access_token"]
    
        # Grant site permissions
        grant_url = f"https://graph.microsoft.com/v1.0/sites/{SITE_ID}/permissions"
        headers = {
            "Authorization": f"Bearer {access_token}",
            "Content-Type": "application/json"
        }
        grant_payload = {
            "roles": ["read"],
            "grantedToIdentities": [
                {
                    "application": {
                        "id": TARGET_APP_CLIENT_ID,
                        "displayName": TARGET_APP_DISPLAY_NAME
                    }
                }
            ]
        }
    
        response = requests.post(grant_url, headers=headers, json=grant_payload)
    
        if response.status_code in [200, 201]:
            print("Successfully granted site permissions")
            print(response.json())
        else:
            print(f"Error: {response.status_code}")
            print(response.text)
    else:
        print("Failed to acquire token")
        print(token_result.get("error"))
        print(token_result.get("error_description"))
    
  4. 运行该单元。 成功的响应指示已授予权限。

步骤 5:在 Azure Databricks 中创建连接

按照部分中的步骤 5 Sites.Read.All ,使用应用程序注册中的凭据在 Azure Databricks 中创建连接。

后续步骤

  1. 创建 Microsoft SharePoint 引入管道
  2. 常见管道维护任务