Pular para o conteúdo principal

Conecte-se a um aplicativo API Databricks usando autenticação de tokens

Você pode chamar um aplicativo Databricks que expõe uma API HTTP (por exemplo, um aplicativo FastAPI ou Gradio) usando a autenticação de tokens OAuth 2.0 Bearer. Este método funciona no seu ambiente de desenvolvimento local, aplicativos externos e outros aplicativos do Databricks.

nota

Este método se aplica somente a aplicativos que expõem APIs ou endpoints (acessíveis usando rotas /api/ ). Para aplicativos que fornecem apenas uma interface de usuário ou processamento em segundo plano, não é possível se conectar usando autenticação de tokens.

Requisitos​

Para se conectar a um aplicativo Databricks usando autenticação de tokens, você deve atender aos seguintes requisitos:

  • O aplicativo deve expor pelo menos um endpoint API acessível usando rotas /api/ .
  • Você deve ter permissão CAN USE no aplicativo. Consulte Configurar permissões para um aplicativo Databricks.
  • Você deve ser capaz de gerar um access token Databricks usando um dos métodos de autenticação suportados.

Métodos de autenticação​

Escolha o método de autenticação que corresponde ao seu cenário de conexão:

Desenvolvimento local​

Para conectar-se ao seu ambiente de desenvolvimento local, use a CLI ou os SDKs do Databricks com suas credenciais de usuário.

  1. faça login com o CLI:

    Bash
    databricks auth login --host https://<workspace-url> --profile my-env

    A Databricks recomenda o uso da autenticação OAuth de usuário para máquina (U2M).

  2. Gerar um access token:

Bash
databricks auth token --profile my-env

Aplicações externas​

Para acesso programático de aplicativos externos, use a autenticação de entidade de serviço com credenciais de máquina a máquina (M2M). Consulte Autorizar o acesso da entidade de serviço ao Databricks com OAuth.

  1. Crie uma entidade de serviço e obtenha o ID do cliente e o segredo. Veja entidade de serviço.

  2. Gere um access token usando o SDK Databricks :

    Python
    from databricks.sdk import WorkspaceClient
    import requests

    # Option 1: Explicit credentials
    wc = WorkspaceClient(
    host="https://<workspace-url>",
    client_id="<service-principal-client-id>",
    client_secret="<service-principal-client-secret>"
    )

    # Option 2: Environment variables
    # Set DATABRICKS_HOST, DATABRICKS_CLIENT_ID, DATABRICKS_CLIENT_SECRET
    wc = WorkspaceClient()

    # Generate Bearer token
    headers = wc.config.authenticate()

De outros aplicativos Databricks​

Quando você se conecta de um aplicativo Databricks a outro, o aplicativo lida com a autenticação automaticamente usando sua entidade de serviço atribuída.

Python
from databricks.sdk import WorkspaceClient
import requests

# No explicit credentials needed, uses app's service principal
wc = WorkspaceClient()
headers = wc.config.authenticate()

De um notebook Databricks​

Para chamar a API de um aplicativo a partir de um Notebook Databricks , você deve trocar os tokens internos do Notebook por tokens OAuth com escopo de público-alvo e, em seguida, usar esses tokens para consultar o aplicativo.

  1. Obtenha o ID do cliente OAuth do aplicativo. Recupere o ID usando o SDK do Databricks:

    Python
    from databricks.sdk import WorkspaceClient

    w = WorkspaceClient()
    app_client_id = w.apps.get("<app-name>").oauth2_app_client_id
  2. Troque os tokens do Notebook por um access token com escopo de público-alvo:

    Python
    import requests

    url = "https://<workspace-url>/oidc/v1/token"
    notebook_token = (
    dbutils.notebook.entry_point.getDbutils()
    .notebook().getContext().apiToken().get()
    )

    data = {
    "grant_type": "urn:ietf:params:oauth:grant-type:token-exchange",
    "subject_token": notebook_token,
    "subject_token_type": "urn:databricks:params:oauth:token-type:personal-access-token",
    "requested_token_type": "urn:ietf:params:oauth:token-type:access_token",
    "scope": "all-apis",
    "audience": app_client_id,
    }

    response = requests.post(url=url, data=data)
    audience_token = response.json()["access_token"]
  3. Use audience_token como tokens Bearer para chamar seu aplicativo. Para exemplos, consulte Enviar solicitações para o aplicativo.

nota

Os tokens trocados são específicos para o aplicativo em questão, portanto, você não pode usá-los para chamar outras APIs Databricks . O parâmetro scope na solicitação de troca de tokens deve corresponder ou ser um superconjunto dos escopos configurados para o aplicativo na autorização do usuário.

Especificar escopos OAuth para autorização do usuário​

Se seu aplicativo usa autorização de usuário, seu access token deve incluir escopos que sejam um superconjunto dos escopos configurados para o aplicativo. Se os tokens não tiverem os escopos necessários, as solicitações podem falhar com erros 401 ou 403.

Os tokens gerados usando a CLI Databricks incluem o escopo all-apis por default, o que atende aos requisitos de autorização do usuário para qualquer aplicativo:

Bash
databricks auth token --profile my-env

Para solicitar escopos específicos em vez de all-apis, você pode solicitar manualmente um access token com escopos explícitos usando um fluxo OAuth personalizado. Por exemplo, a seguinte solicitação pede explicitamente um access token com os escopos sql, files e genie :

Bash
curl --request POST \
https://<databricks-instance>/oidc/v1/token \
--data "client_id=databricks-cli" \
--data "grant_type=authorization_code" \
--data "redirect_uri=<redirect-url>" \
--data "code_verifier=<code-verifier>" \
--data "code=<authorization-code>" \
--data "scope=sql+files+genie"

Para obter instruções completas, consulte Gerar manualmente access tokens OAuth U2M.

Enviar solicitações para o aplicativo​

Ao chamar o endpoint da API do seu aplicativo, inclua os tokens Bearer no cabeçalho Authorization e substitua <your-endpoint> pelo caminho real API do seu aplicativo:

Bash
curl "https://<app-name>-<id>.<region>.databricksapps.com/api/<your-endpoint>" \
-H "Authorization: Bearer <YOUR_TOKEN>"

Considerações de segurança​

Ao se conectar a aplicativos do seu ambiente local, siga estas práticas recomendadas de segurança:

  • Nunca codifique access tokens no seu código-fonte. Use variável de ambiente ou armazenamentos de credenciais seguros.
  • atualize tokens regularmente para minimizar os riscos de segurança caso sejam comprometidos.
  • Evite registrar access tokens ou dados confidenciais nos logs do seu aplicativo.

Solução de problemas​

Se você encontrar problemas ao se conectar ao seu aplicativo a partir de uma máquina local, tente estas soluções.

Falhas de autenticação (erros 401)​

Verifique o seguinte:

  • Seus tokens são válidos (execução databricks auth token --profile my-env)
  • Seu perfil está configurado corretamente com databricks auth login
  • Os tokens não expiraram
  • Seus tokens incluem os escopos OAuth necessários. Os escopos dos seus tokens devem ser um superconjunto dos escopos configurados para o aplicativo na autorização do usuário.

Permissão negada (erros 403)​

Verifique o seguinte:

  • Você tem CAN USE permissão no aplicativo
  • Seus tokens incluem os escopos OAuth necessários. Escopos insuficientes podem causar erros 403, mesmo com permissões válidas.

Aplicativo não encontrado (erros 404)​

Verifique o seguinte:

  • O ID e a URL workspace estão corretos
  • O aplicativo está implantado e em execução
  • O caminho endpoint existe no aplicativo

Problemas de conectividade de rede​

Verifique o seguinte:

  • Sua rede permite conexões HTTPS de saída
  • O domínio *.databricksapps.com é acessível a partir da sua rede

Além disso, verifique se sua organização usa um proxy que requer configuração.

Recurso adicional​

Para mais informação consulte o seguinte recurso: