Any sample code snippet that contains end-to-end OIDC flow

noorbasha534
Valued Contributor II

Hello,

Is there a sample code snippet that depicts end-to-end OIDC flow - imagine, there exists a service principal, interactive user who connect to an sql warehouse, get authenticated, and run some sql queries as part of a python script (jdbc/odbc) for example...

jack_zaldivar
Databricks Employee
Databricks Employee

hi @noorbasha534 

Do you mean something like this?

import os
from databricks import sql
from databricks.sdk.core import Config, oauth_service_principal

# --- Set environment variables or supply directly ---
DATABRICKS_HOST = os.getenv("DATABRICKS_HOST")              # Databricks workspace URL
DATABRICKS_SQLWAREHOUSE_HTTP_PATH = os.getenv("DATABRICKS_SQLWAREHOUSE_HTTP_PATH")  # HTTP path for SQL Warehouse
DATABRICKS_CLIENT_ID = os.getenv("DATABRICKS_CLIENT_ID")    # Service principal Application (client) ID
DATABRICKS_CLIENT_SECRET = os.getenv("DATABRICKS_CLIENT_SECRET")  # Service principal secret/password

# --- Optionally set values directly ---
# DATABRICKS_HOST = "https://<your-databricks-instance>.cloud.databricks.com"
# DATABRICKS_SQLWAREHOUSE_HTTP_PATH = "<your-sql-warehouse-http-path>"
# DATABRICKS_CLIENT_ID = "<your-service-principal-client-id>"
# DATABRICKS_CLIENT_SECRET = "<your-service-principal-secret>"

# Create OAuth config for Service Principal
config = Config(
    host=DATABRICKS_HOST,
    client_id=DATABRICKS_CLIENT_ID,
    client_secret=DATABRICKS_CLIENT_SECRET,
)

# Authenticate via OIDC and connect
connection = sql.connect(
    server_hostname=DATABRICKS_HOST,
    http_path=DATABRICKS_SQLWAREHOUSE_HTTP_PATH,
    credential_provider=oauth_service_principal(config)
)

cursor = connection.cursor()
cursor.execute("SELECT current_date() as today")
result = cursor.fetchall()
for row in result:
    print(row)

cursor.close()
connection.close()

Advika
Community Manager
Community Manager

Hello @noorbasha534, did the code snippet shared above help resolve your concern? If it did, please consider marking it as the accepted solution. If you found another approach, please share it with the community so others can benefit as well.