Подключение к приложению API Databricks с помощью аутентификации с помощью токена

Вы можете вызвать приложение Databricks, которое предоставляет HTTP-API (например, приложение FastAPI или Gradio) с помощью проверки подлинности маркера носителя OAuth 2.0. Этот метод работает из локальной среды разработки, внешних приложений и других Azure Databricks приложений.

Замечание

Этот метод применяется только к приложениям, предоставляющим API-интерфейсы или конечные точки (доступные с помощью /api/ маршрутов). Для приложений, предоставляющих только пользовательский интерфейс или фоновую обработку, нельзя использовать аутентификацию по токену.

Требования

Чтобы подключиться к приложению Databricks с помощью токен-аутентификации, необходимо соответствовать следующим требованиям:

  • Приложение должно предоставлять по крайней мере одну конечную точку API, доступную с помощью /api/ маршрутов.
  • У вас должно быть CAN USE разрешение на приложение. См. настройку разрешений для приложения Databricks.
  • Вы должны иметь возможность создать маркер доступа Azure Databricks с помощью одного из поддерживаемых методов проверки подлинности.

Методы аутентификации

Замечание

Невозможно напрямую обратиться к приложению Databricks с использованием токена Azure Entra ID. Для федерации токенов требуется выполнение обмена токенами на стороне клиента, который Azure Databricks не выполняет на стороне сервера. Чтобы использовать маркеры Azure Entra ID для проверки подлинности, необходимо сначала обменять их на токены OAuth. Произведите аутентификацию с помощью токена поставщика удостоверений.

Выберите метод проверки подлинности, соответствующий сценарию подключения:

Локальная разработка

Для подключения из локальной среды разработки используйте интерфейс командной строки Databricks или пакеты SDK с учетными данными пользователя.

  1. Войдите в систему с помощью интерфейса командной строки:

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

    Azure Databricks рекомендует использовать проверку подлинности OAuth с помощью аутентификации пользователь-машина (U2M).

  2. Создайте маркер доступа:

    интерфейс командной строки (CLI)

    databricks auth token --profile my-env
    

    Python

    from databricks.sdk.core import Config
    config = Config(profile="my-env")
    token = config.oauth_token().access_token
    

Внешние приложения

Для программного доступа из внешних приложений используйте аутентификацию представителя услуги с учетными данными "машина-машина" (M2M). Ознакомьтесь с Авторизацией доступа учетной записи службы к Azure Databricks с помощью OAuth.

  1. Создайте служебный принципал и получите идентификатор клиента и секретный ключ. См. Субъекты-службы.

  2. Создайте маркер доступа с помощью пакета SDK Databricks:

    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()
    

Из других приложений платформы Databricks

При подключении из одного приложения Databricks к другому, приложение автоматически обрабатывает аутентификацию с помощью назначенной учетной записи службы.

from databricks.sdk import WorkspaceClient
import requests

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

Из записной книжки Azure Databricks

Чтобы вызвать API приложения из записной книжки Azure Databricks, необходимо обменять внутренний токен записной книжки на токен OAuth с областью действия для аудитории, а затем использовать этот токен для запроса приложения.

  1. Получите идентификатор клиента OAuth приложения. Получите идентификатор с помощью пакета SDK для Azure Databricks:

    from databricks.sdk import WorkspaceClient
    
    w = WorkspaceClient()
    app_client_id = w.apps.get("<app-name>").oauth2_app_client_id
    
  2. Обменять токен записной книжки на аудиторно-ориентированный токен доступа.

    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. Используйте audience_token как токен типа Bearer для вызова вашего приложения. Примеры см. в разделе "Отправка запросов в приложение".

Замечание

Маркер обмена распространяется на конкретное приложение, поэтому его нельзя использовать для вызова других API-интерфейсов Azure Databricks. Параметр scope в запросе обмена маркерами должен соответствовать или быть супермножеством областей, настроенных для приложения в авторизации пользователя.

Указание областей OAuth для авторизации пользователей

Если приложение использует авторизацию пользователя, маркер доступа должен включать области, которые являются супермножеством областей, настроенных для приложения. Если токен не имеет необходимых полномочий, запросы могут завершиться ошибкой 401 или 403.

Маркер, созданный с помощью интерфейса командной строки Databricks, включает all-apis область по умолчанию, которая удовлетворяет требованиям авторизации пользователей для любого приложения:

databricks auth token --profile my-env

Чтобы запросить определенные разрешения вместо all-apis, вы можете вручную запросить токен доступа с явными разрешениями, используя настраиваемый поток OAuth. Например, следующий запрос явно запрашивает маркер доступа с областями sql, files и 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+files+genie"

Полные инструкции см. в руководстве по созданию маркеров доступа OAuth U2M вручную.

Отправка запросов в приложение

При вызове конечных точек API вашего приложения добавьте токен Bearer в заголовок авторизации и замените <your-endpoint> реальным путем API вашего приложения.

CURL

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

Python с запросами

import requests

response = requests.get(
    "https://<app-name>-<id>.<region>.databricksapps.com/api/<your-endpoint>",
    headers={"Authorization": f"Bearer {token}"}
)

Python с пакетом SDK

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
)

Вопросы безопасности

При подключении к приложениям из локальной среды следуйте приведенным ниже рекомендациям по обеспечению безопасности.

  • Никогда не встраивайте токены доступа в исходный код. Используйте переменные среды или безопасные хранилища учетных данных.
  • Регулярно обновляйте маркеры, чтобы свести к минимуму риски безопасности, если они скомпрометированы.
  • Избегайте регистрации маркеров доступа или конфиденциальных данных в журналах приложения.

Устранение неполадок

Если при подключении к приложению с локального компьютера возникают проблемы, попробуйте выполнить эти решения.

Сбои проверки подлинности (ошибки 401)

Проверьте выполнение следующих условий.

  • Ваш токен действителен (выполните databricks auth token --profile my-env)
  • Профиль правильно настроен с помощью databricks auth login
  • Срок действия маркера не истек
  • Ваш токен включает необходимые права доступа OAuth. Области действия токена должны быть супермножеством областей, настроенных для приложения при авторизации пользователя.

Отклонено разрешение (ошибки 403)

Проверьте выполнение следующих условий.

  • У вас есть CAN USE разрешение на приложение
  • Ваш токен включает необходимые права доступа OAuth. Недостаточные области действия могут привести к ошибкам 403 даже при наличии допустимых разрешений.

Приложение не найдено (ошибки 404)

Проверьте выполнение следующих условий.

  • Правильные ID и URL-адрес рабочей области
  • Приложение развернуто и работает
  • Путь к конечной точке существует в приложении

Проблемы, связанные с подключением к сети

Проверьте выполнение следующих условий.

  • Ваша сеть разрешает исходящие подключения HTTPS
  • Домен *.databricksapps.com доступен из сети

Кроме того, проверьте, использует ли ваша организация прокси-сервер, требующий конфигурации.

Дополнительные ресурсы

Дополнительные сведения см. в следующих ресурсах: