Udostępnij za pośrednictwem


Połącz się z aplikacją API Databricks przy użyciu uwierzytelniania za pomocą tokenu

Możesz wywołać aplikację Databricks, która udostępnia interfejs API HTTP (na przykład aplikację FastAPI lub Gradio) przy użyciu uwierzytelniania z użyciem tokenu typu Bearer OAuth 2.0. Ta metoda działa z lokalnego środowiska deweloperskiego, aplikacji zewnętrznych i innych aplikacji Azure Databricks.

Uwaga / Notatka

Metoda ta dotyczy tylko aplikacji, które udostępniają interfejsy API lub punkty końcowe (dostępne przy użyciu /api/ ścieżek). W przypadku aplikacji, które zapewniają tylko interfejs użytkownika lub przetwarzanie w tle, nie można nawiązać połączenia przy użyciu uwierzytelniania tokenu.

Requirements

Aby nawiązać połączenie z aplikacją usługi Databricks przy użyciu uwierzytelniania tokenu, musisz spełnić następujące wymagania:

  • Aplikacja musi udostępniać co najmniej jeden punkt końcowy interfejsu API dostępny przy użyciu /api/ ścieżek.
  • Musisz mieć CAN USE uprawnienia do aplikacji. Zobacz Konfigurowanie uprawnień dla aplikacji usługi Databricks.
  • Musisz mieć możliwość wygenerowania tokenu dostępu Azure Databricks przy użyciu jednej z obsługiwanych metod uwierzytelniania.

Metody uwierzytelniania

Uwaga / Notatka

Nie można wywołać aplikacji usługi Databricks bezpośrednio przy użyciu tokenu Azure Entra ID. Federacja tokenów wymaga kroku wymiany tokenów po stronie klienta, który Azure Databricks nie wykonuje po stronie serwera. Aby użyć tokenów Azure Entra ID do uwierzytelniania, należy najpierw wymienić je na tokeny OAuth. Zobacz Uwierzytelnianie przy użyciu tokenu dostawcy tożsamości.

Wybierz metodę uwierzytelniania zgodną ze scenariuszem połączenia:

Rozwój lokalny

Aby nawiązać połączenie z lokalnego środowiska deweloperskiego, użyj Databricks CLI lub zestawów SDK z poświadczeniami użytkownika.

  1. Zaloguj się za pomocą interfejsu wiersza polecenia:

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

    Azure Databricks zaleca użycie uwierzytelniania OAuth typu użytkownik-maszyna (U2M.

  2. Generowanie tokenu dostępu:

    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
    

Aplikacje zewnętrzne

W przypadku dostępu programowego z aplikacji zewnętrznych użyj uwierzytelniania jednostki usługi z poświadczeniami maszyny do maszyny (M2M). Zobacz Authorize dostęp jednostki usługi do Azure Databricks za pomocą protokołu OAuth.

  1. Utwórz jednostkę usługi i uzyskaj identyfikator klienta oraz tajny klucz. Zobacz Zasady usługi.

  2. Wygeneruj token dostępu przy użyciu zestawu SDK usługi 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()
    

Z pozostałych aplikacji Databricks

Po połączeniu jednej aplikacji Databricks z inną, aplikacja automatycznie obsługuje uwierzytelnianie przy użyciu przypisanej jednostki usługi.

from databricks.sdk import WorkspaceClient
import requests

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

Z notesu Azure Databricks

Aby wywołać interfejs API aplikacji z notesu Azure Databricks, należy wymienić wewnętrzny token notesu dla tokenu OAuth o zakresie odbiorców, a następnie użyć tego tokenu, aby wykonać zapytanie dotyczące aplikacji.

  1. Pobierz identyfikator klienta OAuth aplikacji. Pobierz identyfikator przy użyciu zestawu SDK Azure Databricks:

    from databricks.sdk import WorkspaceClient
    
    w = WorkspaceClient()
    app_client_id = w.apps.get("<app-name>").oauth2_app_client_id
    
  2. Wymień token notesu na token dostępu ograniczonego do odbiorców:

    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. Użyj audience_token jako Bearer tokenu, aby wywołać swoją aplikację. Aby zapoznać się z przykładami, zobacz Wysyłanie żądań do aplikacji.

Uwaga / Notatka

Token wymieniany jest w zakresie określonym aplikacji, więc nie można go używać do wywoływania innych interfejsów API Azure Databricks. scope Parametr w żądaniu wymiany tokenu musi być zgodny lub być nadzbiorem zakresów skonfigurowanych dla aplikacji w autoryzacji użytkownika.

Określanie zakresów protokołu OAuth na potrzeby autoryzacji użytkownika

Jeśli aplikacja używa autoryzacji użytkownika, token dostępu musi zawierać zakresy, które są nadzbiorem zakresów skonfigurowanych dla aplikacji. Jeśli token nie ma wymaganych zakresów, żądania mogą zakończyć się niepowodzeniem z błędami 401 lub 403.

Token wygenerowany przy użyciu interfejsu wiersza polecenia usługi Databricks domyślnie zawiera all-apis zakres, który spełnia wymagania autoryzacji użytkownika dla dowolnej aplikacji:

databricks auth token --profile my-env

Aby zażądać określonych zakresów zamiast all-apis, możesz ręcznie zażądać tokenu dostępu z jawnymi zakresami przy użyciu niestandardowego przepływu OAuth. Na przykład następujące żądanie jawnie żąda tokenu dostępu z zakresami sql, file.filesi 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"

Aby uzyskać pełne instrukcje, zobacz Ręczne generowanie tokenów dostępu OAuth U2M.

Wysyłanie żądań do aplikacji

Podczas wywoływania punktów końcowych interfejsu API aplikacji dołącz token Bearer w nagłówku Autoryzacji i zastąp <your-endpoint> rzeczywistą ścieżką API swojej aplikacji.

CURL

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

Python z żądaniami

import requests

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

Python z zestawem 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
)

Zagadnienia dotyczące zabezpieczeń

Podczas nawiązywania połączenia z aplikacjami ze środowiska lokalnego postępuj zgodnie z następującymi najlepszymi rozwiązaniami w zakresie zabezpieczeń:

  • Nigdy nie koduj tokenów dostępu na stałe w kodzie źródłowym. Użyj zmiennych środowiskowych lub bezpiecznych magazynów poświadczeń.
  • Odśwież tokeny regularnie, aby zminimalizować zagrożenia bezpieczeństwa, jeśli zostaną naruszone.
  • Unikaj rejestrowania tokenów dostępu lub poufnych danych w dziennikach aplikacji.

Rozwiązywanie problemów

Jeśli wystąpią problemy podczas nawiązywania połączenia z aplikacją z komputera lokalnego, wypróbuj te rozwiązania.

Błędy uwierzytelniania (błędy 401)

Sprawdź następujące:

  • Token jest prawidłowy (uruchom databricks auth token --profile my-env)
  • Twój profil jest poprawnie skonfigurowany za pomocą polecenia databricks auth login
  • Token nie wygasł
  • Token zawiera wymagane zakresy protokołu OAuth. Zakresy tokenu muszą być nadzbiorem zakresów skonfigurowanych dla aplikacji w autoryzacji użytkownika.

Odmowa uprawnień (błędy 403)

Sprawdź następujące:

  • CAN USE Masz uprawnienia do aplikacji
  • Token zawiera wymagane zakresy protokołu OAuth. Niewystarczające zakresy mogą powodować błędy 403 nawet z prawidłowymi uprawnieniami.

Nie znaleziono aplikacji (błędy 404)

Sprawdź następujące:

  • Identyfikator i adres URL obszaru roboczego są poprawne
  • Aplikacja jest wdrażana i uruchomiona
  • Ścieżka punktu końcowego istnieje w aplikacji

Problemy z łącznością sieciową

Sprawdź następujące:

  • Sieć zezwala na wychodzące połączenia HTTPS
  • Domena *.databricksapps.com jest dostępna z sieci

Ponadto sprawdź, czy organizacja używa serwera proxy wymagającego konfiguracji.

Dodatkowe zasoby

Aby uzyskać więcej informacji, zobacz następujące zasoby: