Hämta Microsoft Entra-ID-token för användare med hjälp av MSAL
Viktigt!
Den här artikeln beskriver hur du manuellt skapar Microsoft Entra-ID-token med hjälp av Microsoft Authentication Library (MSAL).
Databricks rekommenderar inte att du skapar Microsoft Entra-ID-token för Azure Databricks-användare manuellt. Detta beror på att varje Microsoft Entra-ID-token är kortlivad och vanligtvis upphör att gälla inom en timme. Efter den här tiden måste du manuellt generera en ersättningstoken för Microsoft Entra-ID. Använd i stället något av de deltagande verktygen eller SDK:erna som implementerar Databricks-klientens enhetliga autentiseringsstandard . Dessa verktyg och SDK:er genererar och ersätter automatiskt förfallna Microsoft Entra-ID-token åt dig, vilket utnyttjar Azure CLI-autentisering.
Azure Databricks-hanterade tjänstens huvudnamn hanteras direkt i Azure Databricks. Microsoft Entra ID managed service principals hanteras i Microsoft Entra-ID, vilket kräver ytterligare behörigheter. Databricks rekommenderar att du använder Azure Databricks-tjänstens huvudnamn för de flesta användningsfall. Databricks rekommenderar dock att du använder Microsoft Entra ID managed service principals i fall där du måste autentisera med Azure Databricks och andra Azure-resurser samtidigt.
Information om hur du skapar ett huvudnamn för en hanterad Azure Databricks-tjänst i stället för ett hanterat Microsoft Entra-ID-huvudnamn finns i Hantera tjänstens huvudnamn.
Du kan använda Microsoft Authentication Library (MSAL) för att hämta Åtkomsttoken för Microsoft Entra-ID programatiskt. I den här artikeln beskrivs grundläggande användning av MSAL-biblioteket och nödvändiga användarindata, med Python-exempel.
Kommentar
MSAL ersätter Microsoft Entra ID Authentication Library (ADAL). All Microsoft-support och utveckling för ADAL, inklusive säkerhetskorrigeringar, upphörde den 30 juni 2022. Se Migrera program till Microsoft Authentication Library (MSAL).
Dricks
Du kanske vill prova att använda Azure CLI i stället för MSAL för att hämta Microsoft Entra-ID-token för användare, eftersom användning av Azure CLI omfattar färre steg. Se Hämta Microsoft Entra-ID-token för användare med hjälp av Azure CLI.
Du kan också definiera ett huvudnamn för tjänsten i Microsoft Entra-ID och hämta en Microsoft Entra-ID-åtkomsttoken för tjänstens huvudnamn i stället för för en användare. Se Hämta Microsoft Entra-ID-token för tjänstens huvudnamn.
Konfigurera en app i Azure Portal
Registrera ett program med Microsoft Entra ID-slutpunkten i Azure Portal. Du kan också använda en Microsoft Entra-ID-app som redan är registrerad. Mer information finns i Registrera en app med hjälp av Azure Portal.
Logga in på Azure-portalen.
Kommentar
Portalen som ska användas skiljer sig beroende på om ditt Microsoft Entra-ID-program körs i det offentliga Azure-molnet eller i ett nationellt eller nationellt moln. Mer information finns i Nationella moln.
Om du har åtkomst till flera klienter, prenumerationer eller kataloger klickar du på ikonen Kataloger + prenumerationer (katalog med filter) på den översta menyn för att växla till den katalog där du vill registrera programmet.
Sök efter och markera Microsoft Entra ID.
I Hantera väljer du Appregistreringar > Ny registrering.
Som Namn anger du ett namn för programmet.
I avsnittet Kontotyper som stöds väljer du Endast konton i den här organisationskatalogen (enskild klient).
I avsnittet Omdirigerings-URI (valfritt) för Välj en plattform väljer du Offentlig klient/intern (mobil och skrivbord) och anger en omdirigerings-URI. I följande exempel är
http://localhost
omdirigerings-URI-värdet .Klicka på Registrera.
På programsidans översiktssida i avsnittet Essentials kopierar du följande värden:
- Program-ID (klient)-ID
- Katalog-ID (klientorganisation)
- I Omdirigerings-URI:er omdirigerar den offentliga klienten den URI som du angav tidigare i den här proceduren.
Lägg till AzureDatabricks i de behörigheter som krävs för det registrerade programmet. Du måste vara administratör för att kunna utföra det här steget. Om du stöter på ett behörighetsrelaterat problem när du utför den här åtgärden kontaktar du administratören för att få hjälp.
På programsidans översiktssida klickar du på Visa API-behörigheter på fliken Kom igång.
Klicka på Lägg till en behörighet.
I fönstret Api-behörigheter för begäran klickar du på fliken API:er som min organisation använder , söker efter AzureDatabricks och väljer den.
Aktivera kryssrutan user_impersonation och klicka sedan på Lägg till behörigheter.
Klicka på Bevilja administratörsmedgivande för ### och sedan på Ja. Om du vill utföra den här åtgärden måste du vara administratörsanvändare eller ha behörighet att bevilja medgivande till programmet. Om du inte ser Bevilja administratörsmedgivande för ###, eller om du hoppar över den här åtgärden, måste du använda auktoriseringskodflödet (interaktivt) första gången du använder programmet för att ge medgivande. Därefter kan du använda metoden Username-password flow (programmatic).
Du kan lägga till ytterligare användare i programmet. Mer information finns i Tilldela ett användarkonto till ett företagsprogram för Azure Portal instruktioner eller Tilldela användare och grupper till ett program i Microsoft Entra-ID (tidigare Azure Active Directory) för PowerShell-instruktioner. En användare kommer inte att kunna hämta en token utan nödvändiga behörigheter.
Hämta en Microsoft Entra ID-åtkomsttoken
Om du vill hämta en Microsoft Entra-ID-åtkomsttoken kan du använda antingen:
Du måste använda auktoriseringskodflödet (interaktivt) för att hämta Åtkomsttoken för Microsoft Entra-ID om:
- Tvåfaktorautentisering är aktiverat i Microsoft Entra-ID.
- Federerad autentisering är aktiverad i Microsoft Entra-ID.
- Du beviljas inte medgivande till det registrerade programmet under programregistreringen.
Om du har behörighet att logga in med ett användarnamn och lösenord kan du använda flödet för användarnamn och lösenord (programmatiskt) för att hämta en Microsoft Entra-ID-åtkomsttoken.
Auktoriseringskodflöde (interaktivt)
Det finns två steg för att hämta en Microsoft Entra ID-åtkomsttoken med hjälp av auktoriseringskodflödet.
- Begär en auktoriseringskod som startar ett webbläsarfönster och ber om Azure-användarinloggning. Auktoriseringskoden returneras när användaren har loggat in.
- Använd auktoriseringskoden för att hämta Åtkomsttoken för Microsoft Entra-ID. Beroende på vilken metod du använder kan en uppdateringstoken också returneras samtidigt och kan användas för att uppdatera Microsoft Entra ID-åtkomsttoken.
En metod för att slutföra dessa två steg är att använda webbläsaren och curl. För att göra detta använder du webbläsaren för att hämta auktoriseringskoden, och sedan använder du auktoriseringskoden och curl
för att hämta Åtkomsttoken för Microsoft Entra-ID. Den här metoden tillhandahåller ingen uppdateringstoken.
En annan metod är att använda MSAL Python-biblioteket. För att göra detta kör du ett enda skript som använder webbläsaren för att hämta auktoriseringskoden och sedan använder auktoriseringskoden för att hämta både en åtkomst- och uppdateringstoken.
Båda dessa metoder förutsätter att du redan är inloggad i Azure. Om du inte är inloggad uppmanas du att göra det i webbläsaren.
Hämta Microsoft Entra-ID-token med hjälp av en webbläsare och curl
Samla in följande information:
Parameter Description Klientorganisations-ID Katalog-ID :t (klientorganisation) för det relaterade programmet som registrerats i Microsoft Entra-ID i Konfigurera en app i Azure Portal. Client ID Program-ID :t (klient) för det relaterade programmet som registrerats i Microsoft Entra-ID. Omdirigerings-URI Lämpliga omdirigerings-URI:er för det relaterade programmet som registrerats i Microsoft Entra-ID (till exempel http://localhost
). Autentiseringssvaren skickas till den här URI:n med auktoriseringskoden inkluderad.Hämta auktoriseringskoden med hjälp av webbläsaren för att bläddra till följande URL. Ersätt fälten i följande URL-exempel. Observera att URL:en måste skickas som en enda rad. radbrytningar har lagts till i följande URL för läsbarhet. Mer information finns i Begära en auktoriseringskod.
https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize?client_id=<client-id> &response_type=code &redirect_uri=<redirect-uri> &response_mode=query &scope=2ff814a6-3304-4ab8-85cb-cd0e6f879c1d%2F.default &state=<state>
Ersätta:
<tenant-id>
med det registrerade programmets klientorganisations-ID.<client-id>
med det registrerade programmets klient-ID.<redirect-uri>
med det registrerade programmets omdirigerings-URI. Den här URI:n måste vara i URL-kodat format (procentkodat). Till exempelhttp://localhost
ärhttp%3A%2F%2Flocalhost
.<state>
med ett slumptal eller kodad information. För att kontrollera integriteten för informationsutbytet bör det här tillståndsvärdet matcha det som finns i den returnerade URL:en senare i den här proceduren.
Ändra inte värdet för parametern
scope
. Den representerar programmatiskt ID för Azure Databricks (2ff814a6-3304-4ab8-85cb-cd0e6f879c1d
) tillsammans med standardomfånget (/.default
URL-kodad som%2f.default
).Till exempel:
https://login.microsoftonline.com/a1bc2d34-5e67-8f89-01ab-c2345d6c78de/oauth2/v2.0/authorize?client_id=12a34b56-789c-0d12-e3fa-b456789c0123 &response_type=code &redirect_uri=http%3A%2F%2Flocalhost &response_mode=query &scope=2ff814a6-3304-4ab8-85cb-cd0e6f879c1d%2F.default &state=12345
Klistra in URL:en som en enda rad i webbläsaren och logga in på Azure om du uppmanas att göra det.
Auktoriseringskoden finns i fältet
code
i den returnerade URL:en. Spara auktoriseringskoden på en säker plats. Kontrollera också att värdet förstate
fältet matchar det som du angav tidigare i den här proceduren.Den fullständiga returnerade URL:en ser ut ungefär så här (med det fullständiga
code
fältvärdet förkortat till0.ASkAIj...RxgFhSAA
här för korthet):http://localhost/?code=0.ASkAIj...RxgFhSAA&state=12345&session_state=c44574d5-38ba-4f93-b2a3-a830db8e8cdf
Använd auktoriseringskoden tillsammans med
curl
för att hämta Åtkomsttoken för Microsoft Entra-ID.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 'scope=2ff814a6-3304-4ab8-85cb-cd0e6f879c1d%2F.default' \ -d 'code=<authorization-code>' \ -d 'redirect_uri=<redirect-uri>' \ -d 'grant_type=authorization_code' \ -d 'state=<state>'
Ersätta:
<tenant-id>
med det registrerade programmets klientorganisations-ID.<client-id>
med det registrerade programmets klient-ID.<authorization-code>
med din auktoriseringskod.<redirect-uri>
med det registrerade programmets omdirigerings-URI. Den här URI:n måste vara i URL-kodat format (procentslutsformat). Till exempelhttp://localhost
ärhttp%3A%2F%2Flocalhost
.<state>
med ett slumptal eller kodad information. För att kontrollera integriteten för informationsutbytet bör det här tillståndsvärdet matcha det som finns i svarsnyttolasten senare i den här proceduren.
Ändra inte värdet för parametern
scope
. Den representerar programmatiskt ID för Azure Databricks (2ff814a6-3304-4ab8-85cb-cd0e6f879c1d
) tillsammans med standardomfånget (/.default
URL-kodad som%2f.default
).Till exempel:
curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \ https://login.microsoftonline.com/a1bc2d34-5e67-8f89-01ab-c2345d6c78de/oauth2/v2.0/token \ -d 'client_id=12a34b56-789c-0d12-e3fa-b456789c0123' \ -d 'scope=2ff814a6-3304-4ab8-85cb-cd0e6f879c1d%2F.default' \ -d 'code=0.ASkAIj...RxgFhSAA' \ -d 'redirect_uri=http%3A%2F%2Flocalhost' \ -d 'grant_type=authorization_code' \ -d 'state=12345'
Microsoft Entra-ID-token finns i värdet i
access_token
resultatet av anropet. Kontrollera att värdetstate
matchar det som du angav tidigare i den här proceduren.
Hämta Microsoft Entra-ID-token med hjälp av MSAL Python-biblioteket
Samla in följande information:
Parameter Description Klientorganisations-ID Katalog-ID :t (klientorganisation) för det relaterade programmet som registrerats i Microsoft Entra-ID i Konfigurera en app i Azure Portal. Client ID Program-ID :t (klient) för det relaterade programmet som registrerats i Microsoft Entra-ID. Den här proceduren förutsätter att du har angett
http://localhost
som omdirigerings-URI för det relaterade programmet som registrerats i Microsoft Entra-ID.Installera MSAL Python SDK på din lokala dator genom att köra
pip install msal
.Spara följande kod som
get-tokens.py
på den lokala datorn.# Given the client ID and tenant ID for an app registered in Azure, # provide a <ms-entra-id> access token and a refresh token. # If the caller is not already signed in to Azure, the caller's # web browser will prompt the caller to sign in first. # pip install msal from msal import PublicClientApplication import sys # You can hard-code the registered app's client ID and tenant ID here, # or you can provide them as command-line arguments to this script. client_id = '<client-id>' tenant_id = '<tenant-id>' # Do not modify this variable. It represents the programmatic ID for # Azure Databricks along with the default scope of '/.default'. scopes = [ '2ff814a6-3304-4ab8-85cb-cd0e6f879c1d/.default' ] # Check for too few or too many command-line arguments. if (len(sys.argv) > 1) and (len(sys.argv) != 3): print("Usage: get-tokens.py <client ID> <tenant ID>") exit(1) # If the registered app's client ID and tenant ID are provided as # command-line variables, set them here. if len(sys.argv) > 1: client_id = sys.argv[1] tenant_id = sys.argv[2] app = PublicClientApplication( client_id = client_id, authority = "https://login.microsoftonline.com/" + tenant_id ) acquire_tokens_result = app.acquire_token_interactive( scopes = scopes ) if 'error' in acquire_tokens_result: print("Error: " + acquire_tokens_result['error']) print("Description: " + acquire_tokens_result['error_description']) else: print("Access token:\n") print(acquire_tokens_result['access_token']) print("\nRefresh token:\n") print(acquire_tokens_result['refresh_token'])
Gör något av följande:
- I föregående kod ersätter du
<client-id>
med det registrerade programmets klient-ID och<tenant-id>
med det registrerade programmets klient-ID och kör sedan skriptet, till exempelpython get-tokens.py
. - Ange det registrerade programmets klient-ID och det registrerade programmets klient-ID när du kör skriptet, till exempel
python get-tokens.py 12a34b56-789c-0d12-e3fa-b456789c0123 a1bc2d34-5e67-8f89-01ab-c2345d6c78de
.
- I föregående kod ersätter du
Om webbläsaren uppmanar dig loggar du in på Azure.
Åtkomst- och uppdateringstoken för Microsoft Entra-ID skrivs ut i utdata.
Användarnamn-lösenordsflöde (programmatiskt)
Om du har behörighet att logga in med ett användarnamn och lösenord samlar du in följande information:
Parameter Description Klientorganisations-ID Katalog-ID :t (klientorganisation) för det relaterade programmet som registrerats i Microsoft Entra-ID i Konfigurera en app i Azure Portal. Client ID Program-ID :t (klient) för det verkliga programmet som registrerats i Microsoft Entra-ID. Användarnamn och lösenord Användarnamnet (dvs. e-postadressen när du loggar in på Azure Portal) och lösenordet för användaren i klientorganisationen. Den här proceduren förutsätter att du har angett
http://localhost
som omdirigerings-URI för det relaterade programmet som registrerats i Microsoft Entra-ID.Installera MSAL Python SDK på din lokala dator genom att köra
pip install msal
.Spara följande kod som
get-tokens-for-user.py
på den lokala datorn.# Given the client ID and tenant ID for an app registered in Azure, # along with an Azure username and password, # provide a <ms-entra-id> access token and a refresh token. # If the caller is not already signed in to Azure, the caller's # web browser will prompt the caller to sign in first. # pip install msal from msal import PublicClientApplication import sys # You can hard-code the registered app's client ID and tenant ID here, # along with the Azure username and password, # or you can provide them as command-line arguments to this script. client_id = '<client-id>' tenant_id = '<tenant-id>' username = '<username>' password = '<password>' # Do not modify this variable. It represents the programmatic ID for # Azure Databricks along with the default scope of '/.default'. scope = [ '2ff814a6-3304-4ab8-85cb-cd0e6f879c1d/.default' ] # Check for too few or too many command-line arguments. if (len(sys.argv) > 1) and (len(sys.argv) != 5): print("Usage: get-tokens-for-user.py <client ID> <tenant ID> <username> <password>") exit(1) # If the registered app's client ID and tenant ID along with the # Azure username and password are provided as command-line variables, # set them here. if len(sys.argv) > 1: client_id = sys.argv[1] tenant_id = sys.argv[2] username = sys.argv[3] password = sys.argv[4] app = PublicClientApplication( client_id = client_id, authority = "https://login.microsoftonline.com/" + tenant_id ) acquire_tokens_result = app.acquire_token_by_username_password( username = username, password = password, scopes = scope ) if 'error' in acquire_tokens_result: print("Error: " + acquire_tokens_result['error']) print("Description: " + acquire_tokens_result['error_description']) else: print("Access token:\n") print(acquire_tokens_result['access_token']) print("\nRefresh token:\n") print(acquire_tokens_result['refresh_token'])
Gör något av följande:
- I föregående kod ersätter du
<client-id>
med det registrerade programmets klient-ID,<tenant-id>
med det registrerade programmets klient-ID,<username>
med användarnamnet och<password>
med lösenordet och kör sedan skriptet, till exempelpython get-tokens-for-user.py
. - Ange det registrerade programmets klient-ID, det registrerade programmets klient-ID, användarnamnet och lösenordet när du kör skriptet, till exempel
python get-tokens-for-user.py 12a34b56-789c-0d12-e3fa-b456789c0123 a1bc2d34-5e67-8f89-01ab-c2345d6c78de someone@example.com "MyPa55w&rd!"
. Om ett kommandoradsargument innehåller specialtecken bör du omge det med citattecken.
- I föregående kod ersätter du
Åtkomst- och uppdateringstoken för Microsoft Entra-ID skrivs ut till din terminal.
Använda en Microsoft Entra ID-åtkomsttoken för att komma åt Databricks REST API
I det här avsnittet beskrivs hur du använder en Microsoft Entra ID-åtkomsttoken för att anropa Databricks REST API. I följande exempel ersätter du <access-token>
med Microsoft Entra ID-åtkomsttoken och <databricks-instance>
med URL:en per arbetsyta för din Azure Databricks-distribution.
Python-exempel
Det här exemplet visar hur du listar klustren på en Azure Databricks-arbetsyta.
import requests
import json
databricks_instance = '<databricks-instance>'
api_version = '/api/2.0'
api_command = '/clusters/list'
url = f"https://{databricks_instance}{api_version}{api_command}"
access_token = '<access-token>'
response = requests.get(
url = url,
headers = { 'Authorization': "Bearer " + access_token}
)
print(json.dumps(json.loads(response.text), indent = 2))
Kommentar
Om du är en icke-administratörsanvändare och vill logga in som administratörsanvändare måste du ange X-Databricks-Azure-Workspace-Resource-Id
huvudet utöver 'Authorization' : 'Bearer '
rubriken och du måste ha rollen Deltagare eller Ägare på arbetsyteresursen i Azure. Du skapar värdet på X-Databricks-Azure-Workspace-Resource-Id
följande sätt:
# ...
subscription = '<azure-subscription-id>'
resource_group = '<azure-resource-group-name>'
workspace = '<databricks-workspace-name-in-azure>'
db_resource_id = '/subscriptions/%s/resourcegroups/%s/providers/microsoft.databricks/workspaces/%s' % (
subscription,
resource_group,
workspace
)
# ...
headers = {
'Authorization': "Bearer " + access_token,
'X-Databricks-Azure-Workspace-Resource-Id': db_resource_id
}
# ...
Information om prenumeration, resurs och arbetsyta i Azure finns i Öppna resurser. Om du vill öppna målresursen kan du söka efter Azure Databricks-tjänsttypen och annan information i Azure som du känner till om Azure Databricks-målarbetsytan.
curl
exempel
curl -X GET \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <access-token>' \
https://<databricks-instance>/api/2.0/clusters/list
Uppdatera en Microsoft Entra ID-åtkomsttoken
Om du får en uppdateringstoken tillsammans med din Åtkomsttoken för Microsoft Entra-ID kan du använda uppdateringstoken för att hämta en ny token. Som standard är livslängden för Microsoft Entra ID-åtkomsttoken en slumpmässig tidsperiod mellan 60 och 90 minuter (i genomsnitt 75 minuter). Du kan konfigurera livslängden för Microsoft Entra ID-åtkomsttoken med hjälp av metoderna i Konfigurerbar tokenlivslängd i Microsoft Entra-ID (tidigare Azure Active Directory).
I följande exempel visas hur du använder MSAL Python-biblioteket tillsammans med en uppdateringstoken för att hämta en ny token.
Spara följande kod som
refresh-tokens.py
på den lokala datorn.# Given the client ID and tenant ID for an app registered in Azure, # along with a refresh token, provide a new <ms-entra-id> access token and # refresh token. # If the caller is not already signed in to Azure, the caller's # web browser will prompt the caller to sign in first. # pip install msal from msal import PublicClientApplication import sys # You can hard-code the registered app's client ID, tenant ID, # and refresh token here, or you can provide them as command-line # arguments to this script. client_id = '<client-id>' tenant_id = '<refresh-token' refresh_token = '<refresh-token>' # Do not modify this variable. It represents the programmatic ID for # Azure Databricks along with the default scope of '.default'. scope = [ '2ff814a6-3304-4ab8-85cb-cd0e6f879c1d/.default' ] # Check for too few or too many command-line arguments. if (len(sys.argv) > 1) and (len(sys.argv) != 4): print("Usage: refresh-tokens.py <client ID> <tenant ID> <refresh token>") exit(1) # If the registered app's client ID, tenant ID, and refresh token are # provided as command-line variables, set them here. if len(sys.argv) > 1: client_id = sys.argv[1] tenant_id = sys.argv[2] refresh_token = sys.argv[3] app = PublicClientApplication( client_id = client_id, authority = "https://login.microsoftonline.com/" + tenant_id ) acquire_tokens_result = app.acquire_token_by_refresh_token( refresh_token = refresh_token, scopes = scope ) if 'error' in acquire_tokens_result: print("Error: " + acquire_tokens_result['error']) print("Description: " + acquire_tokens_result['error_description']) else: print("\nNew access token:\n") print(acquire_tokens_result['access_token']) print("\nNew refresh token:\n") print(acquire_tokens_result['refresh_token'])
Gör något av följande:
- I föregående kod ersätter du
<client-id>
med det registrerade programmets klient-ID,<tenant-id>
med det registrerade programmets klient-ID och<refresh-token>
med uppdateringstoken och kör sedan skriptet, till exempelpython get-tokens-for-user.py
. - Ange det registrerade programmets klient-ID, det registrerade programmets klient-ID och uppdateringstoken när du kör skriptet, till exempel
python refresh-tokens.py 12a34b56-789c-0d12-e3fa-b456789c0123 a1bc2d34-5e67-8f89-01ab-c2345d6c78de "0.ASkAIj...huE84ALg"
. Om ett kommandoradsargument innehåller specialtecken bör du omge det med citattecken.
- I föregående kod ersätter du
De nya Microsoft Entra ID-åtkomst- och uppdateringstoken skrivs ut till terminalen.