使用标识提供者令牌对 Databricks REST API 进行身份验证

重要

Databricks OAuth 令牌联合身份验证处于 公共预览版

本文逐步讲解如何从联合标识提供者传递令牌,以安全地调用 Databricks REST API 并访问 Databricks 资源。

在您开始之前

在开始此任务之前,必须为 Databricks 帐户或服务主体创建联合策略

创建策略后,可以从标识提供者获取并使用 JSON Web 令牌(JWT)访问 Databricks API。 令牌必须是使用 RS256 或 ES256 算法签名的有效 JWT。

从联合标识提供者的令牌开始对 Databricks API 的访问进行身份验证的流程如下:

  1. 向标识提供者发出请求以获取联合 JWT。 如何获取联合 JWT 的详细信息因标识提供者而异。 有关详细信息,请参阅身份验证提供者文档或管理员。
  2. 从标识提供者交换 JWT 以获取 Databricks OAuth 令牌。
  3. 使用 Databricks OAuth 令牌访问 Databricks REST API。

OAuth 令牌联合过程

步骤 1:向标识提供者发出获取联合 JWT 的请求

如何获取联合 JWT 的详细信息因标识提供者而异。 有关详细信息,请参阅身份验证提供者文档或管理员。

步骤 2:从标识提供者交换 JWT 以获取 Databricks OAuth 令牌

通过将来自标识提供者的 JWT 发送到 Databricks 令牌终端以交换 Databricks OAuth 令牌,使用 OAuth 2.0 令牌交换(RFC 8693)在您的帐户或工作区进行操作。

例如,使用帐户联合策略,此命令将从身份提供者获取的联合 JWT 交换为 Databricks OAuth 令牌。

curl --request POST https://<databricks-workspace-host>/oidc/v1/token \
  --data "subject_token=${FEDERATED_JWT_TOKEN}" \
  --data 'subject_token_type=urn:ietf:params:oauth:token-type:jwt' \
  --data 'grant_type=urn:ietf:params:oauth:grant-type:token-exchange' \
  --data 'scope=all-apis'

小窍门

若要使用 OAuth 访问 Databricks 帐户资源,请使用 URL https://<databricks-account-host>/oidc/accounts/<account-id>/v1/token

以下示例命令通过服务主体联合策略将一个联合 JWT 交换为 Databricks OAuth 令牌:

curl --request POST https://<databricks-workspace-host>/oidc/v1/token \
  --data "client_id=${CLIENT_ID}" \
  --data "subject_token=${FEDERATED_JWT_TOKEN}" \
  --data 'subject_token_type=urn:ietf:params:oauth:token-type:jwt' \
  --data 'grant_type=urn:ietf:params:oauth:grant-type:token-exchange' \
  --data 'scope=all-apis'

CLIENT_ID 替换为服务主体 UUID(例如,7cb2f8a4-49a7-4147-83db-35cb69e5cede)。

如果标识提供者的令牌有效且与联合策略匹配,则会收到一个标准 JSON 响应,其中包含 access_token 字段中的 Databricks OAuth 令牌。 此 OAuth 令牌可用于访问 Databricks API。 生成的 Databricks OAuth 令牌的过期 (exp) 声明与 subject_token 参数中提供的 JWT 相同。

下面是 OAuth 令牌终结点响应示例:

{
  "access_token": "eyJraWQ...odi0WFNqQw",
  "scope": "all-apis",
  "token_type": "Bearer",
  "expires_in": 3600
}

步骤 3:使用交换的 Databricks OAuth 令牌向 Databricks API 进行身份验证

然后,可以使用生成的 Databricks OAuth 令牌作为持有者令牌来访问 Databricks API。 例如,若要调用 Databricks SCIM Me API 来检索 Databricks 用户和显示名称:

TOKEN='<your-databricks-oauth-token>'

curl --header "Authorization: Bearer $TOKEN" \
  --url https://${DATABRICKS_WORKSPACE_HOSTNAME}/api/2.0/preview/scim/v2/Me

响应应如下所示:

{
  "userName": "username@mycompany.com",
  "displayName": "Firstname Lastname"
}