Use tokens de um provedor de identidade para se autenticar no Databricks

Neste artigo, o senhor seguirá as etapas para passar tokens de um provedor de identidade federado para chamar com segurança Databricks REST APIs e acessar seu recurso Databricks.

Antes de começar

Antes de iniciar essa tarefa, o senhor deve ter configurado uma política de federação para o seu Databricks account ou entidade de serviço.

Depois de configurá-lo, o senhor pode obter e usar um JSON web tokens (JWT) do seu provedor de identidade para acessar Databricks APIs. Os tokens devem ser JWTs válidos e assinados usando os algoritmos RS256 ou ES256.

O processo de autenticação de acesso ao site Databricks APIs começa com tokens de um provedor de identidade federado:

Fluxo da federação OAuth
  1. Emita uma solicitação a um provedor de identidade para obter um JWT federado. Os detalhes de como obter um JWT federado variam de acordo com o provedor de identidade. Consulte a documentação do seu provedor de identidade ou um administrador para obter detalhes.

  2. Troque o JWT do seu provedor de identidade por um token Databricks OAuth .

  3. Use os tokens Databricks OAuth para acessar Databricks APIs.

Etapa 1: Emitir uma solicitação a um provedor de identidade para obter um JWT federado

Os detalhes de como obter um JWT federado variam de acordo com o provedor de identidade. Consulte a documentação do seu provedor de identidade ou um administrador para obter detalhes.

Etapa 2: Troque um JWT de seu provedor de identidade por tokens Databricks OAuth

O senhor troca um JWT do seu provedor de identidade por tokens Databricks OAuth enviando uma solicitação aos tokens Databricks endpoint para o seu account ou workspace, usando o OAuth 2.0 tokens Exchange(RFC 8693).

Por exemplo, esse comando troca um JWT federado do seu provedor de identidade por tokens Databricks OAuth usando uma política de federação account:

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'

Dica

Para usar OAuth para acessar Databricks account recurso, use o URL https://<databricks-account-host>/oidc/accounts/<account-id>/v1/token.

O comando de exemplo a seguir troca um JWT federado por um Databricks OAuth tokens usando uma política de federação de entidade de serviço:

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'

Substitua CLIENT_ID pelo UUID da entidade de serviço (por exemplo, 7cb2f8a4-49a7-4147-83db-35cb69e5cede).

Se os tokens do seu provedor de identidade forem válidos e corresponderem à sua política de federação, o senhor receberá uma resposta padrão JSON que inclui um Databricks OAuth tokens no campo access_token. Esses tokens OAuth podem ser usados para acessar Databricks APIs. Os tokens Databricks OAuth resultantes têm a mesma reivindicação de expiração (exp) que o JWT fornecido no parâmetro subject_token.

A seguir, um exemplo de resposta OAuth tokens endpoint:

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

Etapa 3: Use os tokens Databricks OAuth trocados para se autenticar no Databricks API

O senhor pode então usar os tokens Databricks OAuth resultantes como tokens portadores para acessar Databricks APIs. Por exemplo, para chamar a API SCIM Me da Databricks para recuperar seu usuário e nome de exibição da Databricks:

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

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

A resposta deve ser semelhante à seguinte:

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