重要
Databricks OAuth 令牌联合身份验证处于 公共预览版。
本文逐步讲解如何从联合标识提供者传递令牌,以安全地调用 Databricks REST API 并访问 Databricks 资源。
在您开始之前
在开始此任务之前,必须为 Databricks 帐户或服务主体创建联合策略。
创建策略后,可以从标识提供者获取并使用 JSON Web 令牌(JWT)访问 Databricks API。 令牌必须是使用 RS256 或 ES256 算法签名的有效 JWT。
从联合标识提供者的令牌开始对 Databricks API 的访问进行身份验证的流程如下:
- 向标识提供者发出请求以获取联合 JWT。 如何获取联合 JWT 的详细信息因标识提供者而异。 有关详细信息,请参阅身份验证提供者文档或管理员。
- 从标识提供者交换 JWT 以获取 Databricks OAuth 令牌。
- 使用 Databricks OAuth 令牌访问 Databricks REST API。
步骤 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"
}