Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Na tej stronie opisano sposób ręcznego generowania tokenów dostępu Microsoft Entra ID dla użytkowników i pryncypałów usługi do uwierzytelniania w interfejsach API REST usługi Azure Databricks. Ręczne generowanie tokenów to zaawansowana technika.
Ważne
Usługa Databricks nie zaleca ręcznego tworzenia tokenów identyfikatora Entra firmy Microsoft. Wygasają w ciągu jednej godziny i wymagają ręcznego zastąpienia. Zamiast tego użyj narzędzi lub zestawów SDK z ujednoliconym uwierzytelnianiem , aby automatycznie obsługiwać zarządzanie tokenami.
Używaj zarządzanych zasad usługowych Azure Databricks w większości przypadków użycia. Używaj tylko zarządzanych zasad usługi Microsoft Entra ID, gdy musisz uzyskać dostęp do zasobów platformy Azure, ponieważ wymagają dodatkowych uprawnień Microsoft Entra ID.
Kiedy należy używać ręcznego generowania tokenów
Użyj ręcznego generowania tokenów tylko wtedy, gdy:
- Należy zintegrować z systemami, które nie mogą korzystać z interfejsu wiersza polecenia platformy Azure ani ujednoliconego uwierzytelniania
- Wymagana jest jawna kontrola nad cyklem życia tokenu i odświeżaniem
- Zajmujesz się rozwiązywaniem problemów z uwierzytelnianiem
W przypadku wszystkich innych przypadków użycia użyj zalecanych metod uwierzytelniania, które automatycznie obsługują zarządzanie tokenami.
Uzyskiwanie tokenów dla użytkowników
Użyj interfejsu wiersza polecenia Azure lub biblioteki Microsoft Authentication Library (MSAL), aby uzyskać tokeny dostępu do Microsoft Entra ID dla użytkowników.
Metoda Azure CLI
Pobierz identyfikator subskrypcji platformy Azure dla konta użytkownika:
Z poziomu obszaru roboczego Azure Databricks: kliknij swoją nazwę użytkownika, przejdź do >> i znajdź identyfikator subskrypcji.
Za pomocą interfejsu wiersza polecenia platformy Azure: Uruchom następujące polecenie (zastąp ciąg adresem URL obszaru roboczego):
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-wsPo
00000000-0000-0000-0000-000000000000znajduje się Twój identyfikator subskrypcji.Jeśli napotkasz błąd dzierżawy, zaloguj się do właściwego dzierżawcy.
az login -t <tenant-id>Zobacz Jak pobrać identyfikatory subskrypcji i dzierżawcy w Azure Portal.
Zaloguj się do platformy Azure:
az loginUstaw poprawną subskrypcję:
az account set -s <subscription-id>Wygeneruj token dostępu:
az account get-access-token \ --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d \ --query "accessToken" \ -o tsvIdentyfikator
2ff814a6-3304-4ab8-85cb-cd0e6f879c1dzasobu to standardowy identyfikator usługi Azure Databricks we wszystkich środowiskach platformy Azure.
metoda MSAL
Użyj biblioteki Microsoft Authentication Library (MSAL) do programowego uzyskiwania tokenów dostępu Microsoft Entra ID. MSAL obsługuje dwa scenariusze:
- Przepływ kodu autoryzacji (interaktywny): Uruchamia przeglądarkę na potrzeby logowania użytkownika. Użyj tej opcji, gdy jest włączone uwierzytelnianie dwuskładnikowe lub federacyjne albo gdy jest wymagana zgoda administratora.
- Przepływ nazwy użytkownika i hasła (programowy): Uwierzytelnia się przy użyciu nazwy użytkownika i hasła. Tej opcji należy używać tylko wtedy, gdy masz uprawnienia do programowego logowania.
Przed rozpoczęciem korzystania z MSAL należy zarejestrować aplikację w koncie Microsoft Entra ID. Zobacz Rejestrowanie aplikacji przy użyciu witryny Azure Portal. Podczas rejestrowania:
- Ustaw Obsługiwane typy kont na Konta tylko w tym katalogu organizacyjnym (jednowarstwowy).
- Ustaw URI przekierowania na publiczny/natywny klient (urządzenia przenośne i komputery) z wartością
http://localhost. - Zanotuj identyfikator aplikacji (klienta) i identyfikator katalogu (dzierżawy) ze strony Przegląd aplikacji.
- Dodaj uprawnienie interfejsu API AzureDatabricks:
- Przejdź do Uprawnienia API>Dodaj uprawnienie.
- Wyszukaj i wybierz pozycję AzureDatabricks.
- Włącz user_impersonation i kliknij pozycję Dodaj uprawnienia.
- Kliknij pozycję Udziel zgody administratora (wymaga uprawnień administratora).
Przepływ kodu autoryzacji
Zainstaluj zestaw MSAL Python SDK:
pip install msal
Zapisz następujący kod 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']}")
Uruchom skrypt:
python get-tokens.py <client-id> <tenant-id>
Przepływ nazwy użytkownika i hasła
Zapisz następujący kod 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']}")
Uruchom skrypt:
python get-tokens-user.py <client-id> <tenant-id> <username> <password>
Uzyskiwanie tokenów dla jednostek usługi
Jednostki usług korzystają z przepływu poświadczeń klienta OAuth 2.0 i mogą mieć inną kontrolę dostępu niż zwykłych użytkowników.
Utwórz kierownika usługi
Jeśli nie masz jednostki usługi, utwórz jednostkę przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure:
Azure Portal
- Zaloguj się do witryny Azure Portal.
- Jeśli to konieczne, przełącz się na właściwą dzierżawę za pomocą Katalogi + subskrypcje.
- Wyszukaj i wybierz Microsoft Entra ID.
- Kliknij pozycję + Dodaj>rejestrację aplikacji.
- Wprowadź nazwę i wybierz opcję Kont w tym katalogu organizacyjnym (jeden najemca).
- Kliknij pozycję Zarejestruj.
- Skopiuj te wartości ze strony Przegląd :
- Identyfikator aplikacji (klienta)
- Identyfikator katalogu (klienta)
- Przejdź do Certyfikaty i tajemnice>Tajemnice klienta>Nowy tajny klucz klienta.
- Dodaj opis, ustaw okres wygaśnięcia, a następnie kliknij przycisk Dodaj.
- Skopiuj i bezpiecznie zapisz sekret klienta wartość.
Azure CLI
Aby uzyskać pełne instrukcje, zobacz Tworzenie jednostki usługi platformy Azure za pomocą interfejsu wiersza polecenia platformy Azure .
Generowanie tokenu
Generowanie tokenu przy użyciu interfejsu API REST lub interfejsu wiersza polecenia platformy Azure. Najpierw zbierz następujące informacje:
- Identyfikator dzierżawy:Identyfikator katalogu (dzierżawy) z Microsoft Entra ID
- Identyfikator klienta:Identyfikator aplikacji (klienta) z identyfikatora entra firmy Microsoft
- Klucz tajny klienta: Wartość klucza tajnego klienta z Microsoft Entra ID
Metoda interfejsu API REST
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>'
Token dostępu znajduje się w access_token polu odpowiedzi.
Metoda Azure CLI
Pobierz identyfikator subskrypcji platformy Azure. Zobacz Uzyskiwanie tokenów dla użytkowników.
Zaloguj się przy użyciu jednostki usługi:
az login \ --service-principal \ -t <tenant-id> \ -u <client-id> \ -p <client-secret>Ustaw poprawną subskrypcję:
az account set -s <subscription-id>Wygeneruj token dostępu:
az account get-access-token \ --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d \ --query "accessToken" \ -o tsv
Używanie tokenów z API Databricks
Po wygenerowaniu tokenu użyj go z interfejsem API REST usługi Databricks.
Jednostki usługi w obszarze roboczym
Jeśli jednostka usługi Databricks została już dodana do obszaru roboczego przy użyciu interfejsu API jednostki usługi lub interfejsu wiersza polecenia Databricks:
Interfejs CLI usługi Databricks
databricks clusters list -p <profile-name-with-token>
skręt
curl -X GET \
-H 'Authorization: Bearer <access-token>' \
https://<databricks-instance>/api/2.0/clusters/list
Jednostki usługi z rolą platformy Azure
Jeśli jednostka usługi ma rolę Contributor lub Owner w zasobie obszaru roboczego na platformie Azure, ale nie znajduje się jeszcze w obszarze roboczym Azure Databricks:
Uzyskaj token zarządzania dla usługi 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>'Wywołaj interfejs API usługi Databricks przy użyciu obu tokenów:
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 pierwszym uwierzytelnieniu jednostka usługi staje się administratorem obszaru roboczego.
Odświeżanie tokenów
Jeśli uzyskasz token odświeżania przy użyciu tokenu dostępu, użyj go, aby uzyskać nowy token. Tokeny dostępu Entra ID Microsoft wygasają domyślnie po upływie 60–90 minut.
Zapisz następujący kod 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']}")
Uruchom skrypt:
python refresh-tokens.py <client-id> <tenant-id> <refresh-token>
Rozwiązywanie problemów z tokenem
W tej sekcji opisano typowe błędy tokenów i sposób weryfikowania tokenów dostępu.
Nie można pobrać tokenu z nazwą użytkownika i hasłem
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.
Rozwiązanie: Upewnij się, że zasób usługi AzureDatabricks został dodany do aplikacji. Użyj przepływu kodu autoryzacji (metody interaktywnej), aby wyrazić zgodę na uprawnienia. Po zaakceptowaniu możesz użyć przepływu logowania przy użyciu nazwy użytkownika i hasła. Zobacz Uzyskiwanie tokenów dla użytkowników.
Identyfikatory URI przekierowania są niezgodne
The reply URL specified in the request does not match the reply URLs configured for the application: '<application-id>'
Rozwiązanie: Sprawdź, czy URI przekierowania w żądaniu jest zgodne z tym skonfigurowanym w aplikacji.
Weryfikowanie tokenu dostępu
Upewnij się, że token dostępu identyfikatora Entra firmy Microsoft zawiera poprawne informacje. Zobacz weryfikowanie tokenów.
-
aud:
2ff814a6-3304-4ab8-85cb-cd0e6f879c1d(Identyfikator zasobu Databricks) -
iss:
https://sts.windows.net/<tenant-id>/ - tid: identyfikator najemcy obszaru roboczego
- nbf/exp: Bieżący czas przypada między tymi wartościami
- unique_name: użytkownik jest obecny w obszarze roboczym
Zweryfikuj podpis przy użyciu publicznych certyfikatów z punktów końcowych OIDC.
Dekoduj bez weryfikacji podpisu:
Poniższy kod przedstawia ładunek tokenu. Najpierw należy zainstalować bibliotekę PyJWT przy użyciu pip install pyjwt oraz bibliotekę kryptografii przy użyciu 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])}")
Dekoduj przy użyciu weryfikacji 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])}")
Użyj dekodatorów JWT online, takich jak jwt.ms lub jwt.io w przypadku tokenów niewrażliwych.