Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Op deze pagina wordt beschreven hoe u handmatig toegangstokens voor Microsoft Entra-id's genereert voor gebruikers en service-principals voor verificatie met Azure Databricks REST API's. Handmatige tokengeneratie is een geavanceerde techniek.
Belangrijk
Databricks raadt niet aan om handmatig Microsoft Entra ID-tokens te maken. Ze verlopen binnen één uur en vereisen handmatige vervanging. Gebruik in plaats daarvan hulpprogramma's of SDK's met geïntegreerde verificatie om tokenbeheer automatisch af te handelen.
Gebruik beheerde service-principals van Azure Databricks voor de meeste toepassingen. Gebruik alleen door Microsoft Entra ID beheerde service-principals wanneer u toegang nodig hebt tot Azure-resources, omdat hiervoor aanvullende Microsoft Entra ID-machtigingen zijn vereist.
Wanneer gebruikt u handmatige tokengeneratie
Gebruik handmatige tokengeneratie alleen wanneer:
- U moet integreren met systemen die geen gebruik kunnen maken van Azure CLI of geïntegreerde verificatie
- U hebt expliciete controle nodig over de levenscyclus en vernieuwing van tokens
- U bent het debuggen van authenticatieproblemen
Gebruik voor alle andere use cases de aanbevolen verificatiemethoden die tokenbeheer automatisch verwerken.
Tokens ophalen voor gebruikers
Gebruik de Azure CLI of de Microsoft Authentication Library (MSAL) om toegangstokens voor Microsoft Entra-id's voor gebruikers op te halen.
Azure CLI-methode
Haal de Azure-abonnements-id op voor uw gebruikersaccount:
Vanuit de Azure Databricks-werkruimte: Klik op het> van uw gebruikersnaam > en zoek de abonnements-id.
Met de Azure CLI: Voer de volgende opdracht uit (vervang door de URL van uw werkruimte):
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-wsDe
00000000-0000-0000-0000-000000000000volgende/subscriptions/is uw abonnements-id.Als er een huurderfout optreedt, log in bij de juiste tenant.
az login -t <tenant-id>
Meld u aan bij Azure:
az loginStel het juiste abonnement in:
az account set -s <subscription-id>Genereer het toegangstoken:
az account get-access-token \ --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d \ --query "accessToken" \ -o tsvDe resource-id
2ff814a6-3304-4ab8-85cb-cd0e6f879c1dis de standaard-id voor Azure Databricks in alle Azure-omgevingen.
MSAL-methode
Gebruik de Microsoft Authentication Library (MSAL) om toegangstokens van Microsoft Entra ID programmatisch op te halen. MSAL ondersteunt twee stromen:
- Autorisatiecodestroom (interactief): Hiermee start u een browser voor gebruikersaanmelding. Gebruik deze optie wanneer tweeledige of federatieve verificatie is ingeschakeld of wanneer beheerderstoestemming is vereist.
- Stroom voor gebruikersnaam-wachtwoord (programmatisch): Verifieert met een gebruikersnaam en wachtwoord. Gebruik dit alleen wanneer u gemachtigd bent om u programmatisch aan te melden.
Voordat u MSAL gebruikt, moet u een toepassing registreren in Microsoft Entra-id. Zie Een app registreren met behulp van Azure Portal. Bij het registreren:
- Stel ondersteunde accounttypenalleen in op Accounts in deze organisatiemap (één tenant).
- Stel Redirect-URI in op publieke client/natieve (mobiel en desktop) met de waarde
http://localhost. - Noteer de toepassings-id (client) en directory-id (tenant) van de Overzicht pagina van de app.
- Voeg de azureDatabricks-API-machtiging toe:
- Ga naar API-machtigingen>Voeg een machtiging toe.
- Zoek en selecteer AzureDatabricks.
- Schakel user_impersonation in en klik op Machtigingen toevoegen.
- Klik op Beheerderstoestemming verlenen (hiervoor zijn beheerdersbevoegdheden vereist).
Autorisatiecodeproces
Installeer de MSAL Python SDK:
pip install msal
Sla de volgende code op als 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']}")
Voer het script uit:
python get-tokens.py <client-id> <tenant-id>
Gebruikersnaam-wachtwoordproces
Sla de volgende code op als 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']}")
Voer het script uit:
python get-tokens-user.py <client-id> <tenant-id> <username> <password>
Tokens ophalen voor service-principals
Service-principals maken gebruik van de OAuth 2.0-clientreferentiestroom en kunnen een ander toegangsbeheer hebben dan gewone gebruikers.
Een service-principal maken
Als u geen service-principal hebt, maakt u er een met behulp van Azure Portal of Azure CLI:
Azure Portal
- Meld u aan bij het Azure-portaal.
- Schakel indien nodig over naar de juiste tenant met directories en abonnementen.
- Zoek en selecteer Microsoft Entra-id.
- Klik op +App-registratie>.
- Voer een naam in en selecteer alleen accounts in deze organisatiemap (één tenant).
- Klik op Registreren.
- Kopieer deze waarden op de pagina Overzicht :
- Applicatie (cliënt) ID
- Directory (huurder) ID
- Ga naar Certificaten en geheimen>Clientgeheimen>Nieuw clientgeheim.
- Voeg een beschrijving toe, stel een verloopperiode in en klik op Toevoegen.
- Kopieer en sla de waarde van het clientgeheim veilig op.
Azure-opdrachtregelinterface (CLI)
Zie Een Azure-service-principal maken met Azure CLI voor volledige instructies.
Een token genereren
Genereer een token met behulp van de REST API of Azure CLI. Verzamel eerst de volgende informatie:
- Tenant-id: De directory-id (tenant) van Microsoft Entra ID
- Client-id: De toepassings-id (client) van Microsoft Entra-id
- Clientgeheim: De waarde van het clientgeheim van Microsoft Entra-id
REST API-methode
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>'
Het toegangstoken bevindt zich in het access_token veld van het antwoord.
Azure CLI-methode
Haal uw Azure-abonnements-id op. Zie Tokens ophalen voor gebruikers.
Meld u aan met uw service-principal:
az login \ --service-principal \ -t <tenant-id> \ -u <client-id> \ -p <client-secret>Stel het juiste abonnement in:
az account set -s <subscription-id>Genereer het toegangstoken:
az account get-access-token \ --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d \ --query "accessToken" \ -o tsv
Tokens gebruiken met Databricks-API's
Nadat u een token hebt gegenereerd, gebruikt u dit met de Databricks REST API.
Service-principals in de werkruimte
Als uw service principal al is toegevoegd aan de werkruimte via de Service Principals API of Databricks CLI:
Databricks-CLI
databricks clusters list -p <profile-name-with-token>
curl
curl -X GET \
-H 'Authorization: Bearer <access-token>' \
https://<databricks-instance>/api/2.0/clusters/list
Service-principals met Azure-rol
Als uw service-principal de rol Contributor of Owner heeft voor de werkruimteresource in Azure, maar nog niet in de werkruimte van Azure Databricks is:
Een beheertoken ophalen voor 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>'Roep de Databricks-API aan met beide tokens:
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
Na de eerste verificatie wordt de service-principal een werkruimtebeheerder.
Vernieuwen van tokens
Als u een verversingstoken met uw toegangstoken heeft verkregen, gebruikt u dit om een nieuw token op te halen. Microsoft Entra ID-toegangstokens verlopen standaard na 60-90 minuten.
Sla de volgende code op als 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']}")
Voer het script uit:
python refresh-tokens.py <client-id> <tenant-id> <refresh-token>
Tokenproblemen oplossen
In deze sectie worden veelvoorkomende tokenfouten beschreven en hoe u toegangstokens valideert.
Kan token niet ophalen met gebruikersnaam en wachtwoord
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.
Oplossing: Zorg ervoor dat de AzureDatabricks-resource is toegevoegd aan uw toepassing. Gebruik de autorisatiecodestroom (interactieve methode) om toestemming te geven voor machtigingen. Nadat u toestemming hebt gegeven, kunt u de gebruikersnaam-wachtwoordstroom gebruiken. Zie Tokens ophalen voor gebruikers.
Omleidings-URI's komen niet overeen
The reply URL specified in the request does not match the reply URLs configured for the application: '<application-id>'
Oplossing: Controleer of de omleidings-URI in uw aanvraag overeenkomt met de omleidings-URI die is geconfigureerd in de toepassing.
Een toegangstoken valideren
Zorg ervoor dat uw Microsoft Entra ID-toegangstoken de juiste informatie bevat. Zie tokens valideren.
-
aud:
2ff814a6-3304-4ab8-85cb-cd0e6f879c1d(Databricks-resource-id) -
iss:
https://sts.windows.net/<tenant-id>/ - tid: Tenant-id van werkruimte
- nbf/exp: de huidige tijd valt tussen deze waarden
- unique_name: Gebruiker is aanwezig in de werkplek
Valideer de handtekening met behulp van openbare certificaten van de OIDC-eindpunten.
Decoderen zonder handtekeningverificatie:
De volgende code toont de payload van het token. U moet eerst de PyJWT-bibliotheek installeren met behulp van pip install pyjwt en de cryptografiebibliotheek met behulp van 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])}")
Decoderen met handtekeningverificatie:
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])}")
Gebruik online JWT-decoders zoals jwt.ms of jwt.io voor niet-gevoelige tokens.