Compartir a través de

在计算机到计算机流中使用 Python 客户端和 Open ID Connect (OIDC) 联合接收 Delta Sharing 共享(开放共享)

本页介绍数据收件人如何使用自己标识提供者 (IdP) 中注册的 Python 客户端,来建立对 Databricks 中创建的 Delta Sharing 共享的访问权限。 此“计算机到计算机”(M2M) OAuth 客户端凭据授予流通常用于应用程序(例如虚拟机上运行的夜间作业)自主访问数据的情况。 此身份验证流程使用 OIDC 联合身份验证,允许接收方的 IdP 颁发的 JSON Web 令牌(JWT)作为短期 OAuth 令牌,这些令牌经过 Databricks 的身份验证。 此 Databricks 到开放共享 身份验证流程适用于无法访问启用了 Unity Catalog 的 Databricks 工作区的收件人。

开放 OIDC 联合是一种替代方法,该方法使用长期存在的 Databricks 颁发的持有者令牌,将非 Databricks 收件人连接到提供者。 在 OAuth 客户端凭据授予流中,OAuth 应用程序注册为收件人 IdP 中的服务主体(SP)。 Databricks、提供程序和收件人之间不会共享长期机密或凭据。 有关改用持有者令牌管理共享身份验证的信息,请参阅 使用持有者令牌(打开共享)为非 Databricks 用户创建收件人对象

本文适用于收件人。 有关如何在 Azure Databricks 中为收件人启用 OIDC 联合身份验证的信息,请参阅 使用 Open ID Connect (OIDC) 联合身份验证启用对 Delta 共享共享(开放共享)的身份验证。 有关“用户到计算机”(U2M) 流的信息,请参阅在用户到计算机流(开放共享)中,通过 Open ID Connect (OIDC) 联合接收 Delta Sharing 共享

在 IdP 中注册应用

在使用 OIDC 联合授予客户端应用程序对 Delta Sharing 共享的访问权限之前,必须在你的 IdP 中注册 OAuth 应用程序。 本部分介绍如何在 Microsoft Entra ID 中注册 OAuth 应用程序。 有关其他 IdP,请参阅其文档。

在 Microsoft Entra ID 中注册应用

这些说明旨在用作常规指导,不保证处于最新状态。 有关详细的应用注册说明,请参阅此 Microsoft快速入门

  1. 以至少应用程序开发人员身份登录到 Microsoft Entra 管理中心。

  2. 转到 “应用注册” ,在没有重定向 URL 的情况下创建新的注册。

  3. 转到 “证书和机密 > ”为应用创建机密

  4. 复制机密值并安全地存储它。

  5. 在应用的 “应用注册 > 概述 ”页上,复制 应用程序(客户端)ID

  6. 通过更新清单将应用修改为 V2 应用程序:

    1. 在应用的 “管理 ”部分中,选择“ 清单”。

    2. 在编辑器中,将accessTokenAcceptedVersion设置为2

    3. 保存更改。

将所需信息发送到 Azure Databricks 数据提供程序

如果你作为收件人使用 Microsoft Entra ID,则可以按照以下说明获取提供者要求的字段。 请始终参阅 Microsoft Entra ID 文档以获取最新的说明。

  • 颁发者 URLhttps://login.partner.microsoftonline.cn/{tenantId}/v2.0,用于将 {tenantId} 替换为你的 Entra 租户 ID。 如果不知道租户 ID,请参阅 Microsoft Entra ID 文档

  • 主题声明:指在 JWT 有效负载中用于识别访问数据的实体的字段。 使用的具体字段取决于您的身份提供商(IdP)和用例。 例如,在 Microsoft Entra ID 中的 M2M 应用程序中,使用者声明为 azp,这表示有权使用令牌的应用程序的客户端 ID。 有关详细信息,请参阅 Microsoft Entra ID 访问令牌声明参考

  • 对象:指接收方身份提供方(IdP)中注册的 OAuth 应用程序的唯一标识符。
    例如,在 Microsoft Entra ID 中,这是 应用程序(客户端)ID。 如果您在注册时未复制客户端 ID,可以按照 IdP 的特定步骤来检索它。 对于 Microsoft Entra ID,请执行以下步骤:

    1. 导航到 Microsoft Entra 管理中心中的 应用注册
    2. 选择已注册的 OAuth 应用程序。
    3. 在“概述”页上找到 应用程序(客户端)ID

    对于其他 IdP,请参阅其文档以检索等效标识符。

  • 受众:对于计算机到 Azure Databricks 身份验证,通常使用资源的clientId,但也可以指定任何其他有效的资源标识符。

    你在上一步中应已复制此项。 如果没有,请导航到Microsoft Entra 管理中心,搜索 应用注册,选择已注册的应用程序,然后在“概述”页上找到 应用程序(客户端)ID 。 您也可以使用不同的资源标识符。

与提供者共享颁发者、使用者声明、主题和受众。

将应用配置为使用 Databricks 提供者共享的 OAuth 配置文件

要将应用配置为从提供者访问增量共享共享,请执行以下操作:

  1. 请访问 Databricks 提供程序与你共享的 OIDC 配置文件门户的 URL。

    如果尚未收到 URL,请请求该 URL。

  2. 在门户页上,选择 M2M 磁贴,然后在 “对于 OAuth”下,单击“ 下载文件”。

  3. 修改下载的 oauth_config.share JSON 文件,以添加你的 clientIdclientSecretscope

    注册应用时,应已复制客户端 ID 和客户端密码。 不能再次检索客户端密码。 若要检索客户端 ID,请参阅上一部分的说明。

    如果选择将应用 {clientId} 用作受众,范围应为 {clientId}/.default。 例如,如果受众是 61a80fb9-ce0c-4794-9f7f-2ba42a7b76f6,范围应为 61a80fb9-ce0c-4794-9f7f-2ba42a7b76f6/.default

    示例配置文件:

    {
      "shareCredentialsVersion": 2,
      "endpoint": "https://oregon.cloud.databricks.com/api/2.0/delta-sharing/metastores/11a11aaa-11aa-11a12-11aa-111a1aa11111/recipients/a11da11aa1-a1a1-11a1-a11a-1111a11111aa",
      "tokenEndpoint": "https://login.partner.microsoftonline.cn/a111a111-1111-1aaa-1aa1-1aa1111aa1/oauth2/v2.0/token",
      "type": "oauth_client_credentials",
      "clientId": "[REPLACE_WITH_YOUR_CLIENT_ID]",
      "clientSecret": "[REPLACE_WITH_YOUR_CLIENT_SECRET]",
      "scope": "[REPLACE_WITH_YOUR_SCOPE]"
    }
    
  4. 安装和配置最新的 Delta 共享 Python OSS 客户端。

    必须具有最新版本的 Delta Sharing Python OSS 客户端。

    python3 -m venv .venv
    source .venv/bin/activate
    pip3 install "delta-sharing>=1.3.1"
    
  5. 保存更新的 oauth_config.share 文件。

  6. 测试配置:

    创建测试脚本, test.py

    import delta_sharing
    
    # Point to the profile file. It can be a file on the local file system or a file on a remote storage.
    
     profile_file = "oauth_config.share"
    
     # Create a SharingClient.
     client = delta_sharing.SharingClient(profile_file)
     #
     # List all shared tables.
     tables = client.list_all_tables()
    
     print(tables)
    
     # replace the following line with the coordinates of the shared table
     #table_url = profile_file + "#sample_share.sample_db.sample_table"
    
     # Fetch 10 rows from a table and convert it to a Pandas DataFrame.
     # This can be used to read sample data from a table that cannot fit in the memory.
     #df = delta_sharing.load_as_pandas(table_url, limit=10)
    
     #print(df)
    

    运行以下脚本:

    python3 test.py
    

    该脚本应列出共享表。