Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tato stránka popisuje, jak ručně generovat přístupové tokeny Microsoft Entra ID pro účely ověřování uživatelů a služebních identit pomocí rozhraní REST API Azure Databricks. Ruční generování tokenů je pokročilá technika.
Důležité
Databricks nedoporučuje ručně vytvářet tokeny ID Microsoft Entra. Platnost vyprší do jedné hodiny a vyžaduje ruční nahrazení. Místo toho používejte nástroje nebo sady SDK s jednotným ověřováním k automatickému zpracování správy tokenů.
Pro většinu případů použití používejte spravované služební identity Azure Databricks. Instanční objekty spravované pomocí Microsoft Entra ID používejte jenom v případě, že potřebujete přístup k prostředkům Azure, protože vyžadují další oprávnění Microsoft Entra ID.
Kdy použít ruční generování tokenů
Ruční generování tokenů používejte pouze v případech:
- Potřebujete integraci se systémy, které nemůžou používat Azure CLI nebo jednotné ověřování.
- Vyžadujete explicitní kontrolu nad životním cyklem tokenů a aktualizací.
- Řešíte problémy s ověřováním.
Pro všechny ostatní případy použití použijte doporučené metody ověřování, které zpracovávají správu tokenů automaticky.
Získání tokenů pro uživatele
Pomocí Azure CLI nebo knihovny Microsoft Authentication Library (MSAL) získejte přístupové tokeny Microsoft Entra ID pro uživatele.
Metoda Azure CLI
Získejte ID předplatného Azure pro váš uživatelský účet:
Z pracovního prostoru Azure Databricks: Klikněte na přehled svého uživatelského jména > na webu Azure Portal> a vyhledejte ID předplatného.
Pomocí Azure CLI: Spusťte následující příkaz (nahraďte adresou URL pracovního prostoru):
az databricks workspace list --query "[?workspaceUrl==\`adb-0000000000000000.0.azuredatabricks.net\`].{id:id}" -o tsv # /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/my-rg/providers/Microsoft.Databricks/workspaces/my-wsTo
00000000-0000-0000-0000-000000000000, co se nachází za/subscriptions/, je ID vašeho předplatného.Pokud se zobrazí chyba tenanta, přihlaste se ke správnému tenantovi:
az login -t <tenant-id>
Přihlaste se k Azure:
az loginNastavte správné předplatné:
az account set -s <subscription-id>Vygenerujte přístupový token:
az account get-access-token \ --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d \ --query "accessToken" \ -o tsvID
2ff814a6-3304-4ab8-85cb-cd0e6f879c1dprostředku je standardní identifikátor Azure Databricks ve všech prostředích Azure.
Metoda MSAL
Pomocí knihovny Microsoft Authentication Library (MSAL) programově získejte přístupové tokeny Microsoft Entra ID. MSAL podporuje dva toky:
- Průběh autorizačního kódu (interaktivní): Otevře prohlížeč pro přihlášení uživatele. Tuto možnost použijte, pokud je povolené dvoufaktorové nebo federované ověřování nebo když se vyžaduje souhlas správce.
- Tok uživatelského jména a hesla (programový): Ověřuje se pomocí uživatelského jména a hesla. Tuto možnost použijte jenom v případě, že máte oprávnění k přihlášení prostřednictvím kódu programu.
Před použitím knihovny MSAL je nutné zaregistrovat aplikaci v Microsoft Entra ID. Viz Registrace aplikace pomocí webu Azure Portal. Při registraci:
- Nastavte podporované typy účtůna Účty pouze v tomto organizačním adresáři (jeden tenant).
- Nastavte
přesměrovací URI naveřejný klient/nativní (mobilní & desktop) s hodnotou. - Poznamenejte si ID aplikace (klienta) a ID adresáře (tenanta) ze stránky Přehled aplikace.
- Přidejte oprávnění rozhraní API AzureDatabricks :
- Přejděte na Oprávnění rozhraní API> a Přidat oprávnění.
- Vyhledejte a vyberte AzureDatabricks.
- Povolte user_impersonation a klikněte na Přidat oprávnění.
- Klikněte na Udělit souhlas správce (vyžaduje oprávnění správce).
Tok autorizačního kódu
Nainstalujte MSAL Python SDK:
pip install msal
Uložte následující kód jako get-tokens.py:
from msal import PublicClientApplication
import sys
# Provide client ID and tenant ID as command-line arguments
client_id = sys.argv[1] if len(sys.argv) > 1 else '<client-id>'
tenant_id = sys.argv[2] if len(sys.argv) > 1 else '<tenant-id>'
scopes = ['2ff814a6-3304-4ab8-85cb-cd0e6f879c1d/.default']
app = PublicClientApplication(
client_id=client_id,
authority=f"https://login.microsoftonline.com/{tenant_id}"
)
result = app.acquire_token_interactive(scopes=scopes)
if 'error' in result:
print(f"Error: {result['error']}")
print(f"Description: {result['error_description']}")
else:
print(f"Access token:\n{result['access_token']}")
print(f"\nRefresh token:\n{result['refresh_token']}")
Spusťte skript:
python get-tokens.py <client-id> <tenant-id>
Tok uživatelského jména a hesla
Uložte následující kód jako get-tokens-user.py:
from msal import PublicClientApplication
import sys
client_id = sys.argv[1] if len(sys.argv) > 1 else '<client-id>'
tenant_id = sys.argv[2] if len(sys.argv) > 1 else '<tenant-id>'
username = sys.argv[3] if len(sys.argv) > 1 else '<username>'
password = sys.argv[4] if len(sys.argv) > 1 else '<password>'
scopes = ['2ff814a6-3304-4ab8-85cb-cd0e6f879c1d/.default']
app = PublicClientApplication(
client_id=client_id,
authority=f"https://login.microsoftonline.com/{tenant_id}"
)
result = app.acquire_token_by_username_password(
username=username,
password=password,
scopes=scopes
)
if 'error' in result:
print(f"Error: {result['error']}")
print(f"Description: {result['error_description']}")
else:
print(f"Access token:\n{result['access_token']}")
print(f"\nRefresh token:\n{result['refresh_token']}")
Spusťte skript:
python get-tokens-user.py <client-id> <tenant-id> <username> <password>
Získání tokenů pro služební účty
Služební principály využívají tok přihlašovacích údajů klienta OAuth 2.0 a jejich řízení přístupu může být odlišné od řízení běžných uživatelů.
Vytvořte služebního principála
Pokud nemáte hlavní účet služby, vytvořte ho pomocí Azure portálu nebo Azure CLI.
Azure Portal
- Přihlaste se do Azure Portalu.
- V případě potřeby přepněte na správného nájemce pomocí Directories + subscriptions.
- Vyhledejte a vyberte Microsoft Entra ID.
- Klikněte na + Přidat>registraci aplikace.
- Zadejte název a vyberte Účty pouze v tomto adresáři organizace (jediný tenant).
- Klikněte na Zaregistrovat.
- Zkopírujte tyto hodnoty ze stránky Přehled :
- ID aplikace (klienta)
- ID adresáře (tenanta)
- Přejděte na Certifikáty a tajné>kódy> klientaNové tajné klíče klienta.
- Přidejte popis, nastavte období vypršení platnosti a klikněte na Přidat.
- Zkopírujte a bezpečně uložte Value tajného klíče klienta.
Azure CLI (příkazový řádek nástroje Azure)
Úplné pokyny najdete v tématu Vytvoření instančního objektu Azure pomocí Azure CLI .
Vygenerování tokenu
Vygenerujte token pomocí rozhraní REST API nebo Azure CLI. Nejprve shromážděte následující informace:
- ID tenanta:ID adresáře (tenanta) z Microsoft Entra ID
- ID klienta:ID aplikace (klienta) z Microsoft Entra ID
- Tajný klíč klienta:Hodnota tajného klíče klienta z ID Microsoft Entra
Metoda rozhraní REST API
curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token \
-d 'client_id=<client-id>' \
-d 'grant_type=client_credentials' \
-d 'scope=2ff814a6-3304-4ab8-85cb-cd0e6f879c1d%2F.default' \
-d 'client_secret=<client-secret>'
Přístupový token je v access_token poli odpovědi.
Metoda Azure CLI
Získejte ID předplatného Azure. Viz Získání tokenů pro uživatele.
Přihlaste se pomocí služebního principálu:
az login \ --service-principal \ -t <tenant-id> \ -u <client-id> \ -p <client-secret>Nastavte správné předplatné:
az account set -s <subscription-id>Vygenerujte přístupový token:
az account get-access-token \ --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d \ --query "accessToken" \ -o tsv
Použití tokenů s rozhraními Databricks API
Po vygenerování tokenu ho použijte s rozhraním Databricks REST API.
Služební identity v pracovním prostoru
Pokud už je váš instanční objekt přidaný do pracovního prostoru pomocí rozhraní API instančních objektů nebo rozhraní příkazového řádku Databricks:
Příkazové rozhraní Databricks
databricks clusters list -p <profile-name-with-token>
kroucení
curl -X GET \
-H 'Authorization: Bearer <access-token>' \
https://<databricks-instance>/api/2.0/clusters/list
Účastníci služby s rolí Azure
Pokud má váš instanční objekt služby roli Contributor nebo Owner pro prostředek pracovního prostoru v Azure, ale ještě není v pracovním prostoru Azure Databricks:
Získání tokenu pro správu pro Azure Resource Manager:
curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \ https://login.microsoftonline.com/<tenant-id>/oauth2/token \ -d 'client_id=<client-id>' \ -d 'grant_type=client_credentials' \ -d 'resource=https%3A%2F%2Fmanagement.core.windows.net%2F' \ -d 'client_secret=<client-secret>'Zavolejte Databricks API s oběma tokeny:
curl -X GET \ -H 'Authorization: Bearer <databricks-access-token>' \ -H 'X-Databricks-Azure-SP-Management-Token: <management-access-token>' \ -H 'X-Databricks-Azure-Workspace-Resource-Id: /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Databricks/workspaces/<workspace-name>' \ https://<databricks-instance>/api/2.0/clusters/list
Po prvním ověření se principál služby stane správcem pracovního prostoru.
Aktualizace tokenů
Pokud jste získali obnovovací token s přístupovým tokenem, použijte ho k získání nového tokenu. Platnost přístupových tokenů Microsoft Entra ID vyprší po 60 až 90 minutách.
Uložte následující kód jako refresh-tokens.py:
from msal import PublicClientApplication
import sys
client_id = sys.argv[1] if len(sys.argv) > 1 else '<client-id>'
tenant_id = sys.argv[2] if len(sys.argv) > 1 else '<tenant-id>'
refresh_token = sys.argv[3] if len(sys.argv) > 1 else '<refresh-token>'
scopes = ['2ff814a6-3304-4ab8-85cb-cd0e6f879c1d/.default']
app = PublicClientApplication(
client_id=client_id,
authority=f"https://login.microsoftonline.com/{tenant_id}"
)
result = app.acquire_token_by_refresh_token(
refresh_token=refresh_token,
scopes=scopes
)
if 'error' in result:
print(f"Error: {result['error']}")
print(f"Description: {result['error_description']}")
else:
print(f"\nNew access token:\n{result['access_token']}")
print(f"\nNew refresh token:\n{result['refresh_token']}")
Spusťte skript:
python refresh-tokens.py <client-id> <tenant-id> <refresh-token>
Řešení potíží s tokeny
Tato část popisuje běžné chyby tokenů a způsob ověřování přístupových tokenů.
Nepodařilo se získat token s uživatelským jménem a heslem
The user or administrator has not consented to use the application with ID <client-id>.
Send an interactive authorization request for this user and resource.
Řešení: Ujistěte se, že je prostředek AzureDatabricks přidaný do vaší aplikace. K vyjádření souhlasu s oprávněními použijte tok autorizačního kódu (interaktivní metoda). Po vyjádření souhlasu můžete použít tok uživatelského jména a hesla. Viz Získání tokenů pro uživatele.
URI pro přesměrování se neshodují
The reply URL specified in the request does not match the reply URLs configured for the application: '<application-id>'
Řešení: Ověřte, že identifikátor URI přesměrování v požadavku odpovídá identifikátoru URI přesměrování nakonfigurovaného v aplikaci.
Ověření přístupového tokenu
Ujistěte se, že přístupový token Microsoft Entra ID obsahuje správné informace. Viz ověření tokenů.
-
aud:
2ff814a6-3304-4ab8-85cb-cd0e6f879c1d(ID prostředku Databricks) -
iss:
https://sts.windows.net/<tenant-id>/ - tid: ID tenanta pracovního prostoru
- nbf/exp: Aktuální čas spadá mezi tyto hodnoty
- unique_name: Uživatel existuje v pracovním prostoru.
Ověřte podpis pomocí veřejných certifikátů z koncových bodů OIDC.
Dekódování bez ověření podpisu:
Následující kód ukazuje datovou část tokenu. Nejprve je nutné nainstalovat knihovnu PyJWT pomocí pip install pyjwt a kryptografické knihovny pomocí pip install cryptography.
import jwt
def decode_token(token):
algorithm = jwt.get_unverified_header(token)['alg']
decoded = jwt.decode(token, algorithms=[algorithm], options={"verify_signature": False})
for key in decoded.keys():
print(f"{key}: {str(decoded[key])}")
Dekódování pomocí ověření podpisu:
import jwt
import requests
from cryptography.x509 import load_pem_x509_certificate
from cryptography.hazmat.backends import default_backend
PEMSTART = '-----BEGIN CERTIFICATE-----\n'
PEMEND = '\n-----END CERTIFICATE-----\n'
def get_public_key_for_token(kid):
response = requests.get('https://login.microsoftonline.com/common/.well-known/openid-configuration').json()
pubkeys = requests.get(response['jwks_uri']).json()['keys']
for key in pubkeys:
if key['kid'] == kid:
cert_str = PEMSTART + str(key['x5c'][0]) + PEMEND
cert_obj = load_pem_x509_certificate(bytes(cert_str, 'ascii'), default_backend())
return cert_obj.public_key()
def aad_access_token_decoder(access_token):
header = jwt.get_unverified_header(access_token)
public_key = get_public_key_for_token(header['kid'])
decoded = jwt.decode(access_token, key=public_key, algorithms='RS256',
audience='2ff814a6-3304-4ab8-85cb-cd0e6f879c1d')
for key in decoded.keys():
print(f"{key}: {str(decoded[key])}")
Používejte online dekodéry JWT, jako jwt.ms nebo jwt.io pro necitlivé tokeny.