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.
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 USEno 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.
-
faça login com o CLI:
Bashdatabricks auth login --host https://<workspace-url> --profile my-envA Databricks recomenda o uso da autenticação OAuth de usuário para máquina (U2M).
-
Gerar um access token:
- CLI
- Python
databricks auth token --profile my-env
from databricks.sdk.core import Config
config = Config(profile="my-env")
token = config.oauth_token().access_token
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.
-
Crie uma entidade de serviço e obtenha o ID do cliente e o segredo. Veja entidade de serviço.
-
Gere um access token usando o SDK Databricks :
Pythonfrom 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.
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.
-
Obtenha o ID do cliente OAuth do aplicativo. Recupere o ID usando o SDK do Databricks:
Pythonfrom databricks.sdk import WorkspaceClient
w = WorkspaceClient()
app_client_id = w.apps.get("<app-name>").oauth2_app_client_id -
Troque os tokens do Notebook por um access token com escopo de público-alvo:
Pythonimport 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"] -
Use
audience_tokencomo tokens Bearer para chamar seu aplicativo. Para exemplos, consulte Enviar solicitações para o aplicativo.
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:
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, file.files e dashboards.genie :
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+file.files+dashboards.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:
- CURL
- Python with requests
- Python with SDK
curl "https://<app-name>-<id>.<region>.databricksapps.com/api/<your-endpoint>" \
-H "Authorization: Bearer <YOUR_TOKEN>"
import requests
response = requests.get(
"https://<app-name>-<id>.<region>.databricksapps.com/api/<your-endpoint>",
headers={"Authorization": f"Bearer {token}"}
)
from databricks.sdk import WorkspaceClient
import requests
wc = WorkspaceClient()
headers = wc.config.authenticate()
response = requests.get(
"https://<app-name>-<id>.<region>.databricksapps.com/api/<your-endpoint>",
headers=headers
)
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 USEpermissã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:
- Livro de receitas: Conectar da máquina local
- Livro de receitas: Conectar de aplicativos externos
- Livro de receitas: conectar de outros aplicativos
- Configurar permissões para um aplicativo Databricks
- Configure seu ambiente workspace e desenvolvimento Databricks Apps
- Autenticação para a CLI do Databricks
- Autenticação unificada do Databricks