Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Halaman ini menjelaskan cara membuat token akses ID Microsoft Entra secara manual bagi pengguna dan perwakilan layanan untuk mengautentikasi dengan REST API Azure Databricks. Pembuatan token manual adalah teknik lanjutan.
Penting
Databricks tidak merekomendasikan untuk membuat token ID Microsoft Entra secara manual. Mereka kedaluwarsa dalam waktu satu jam dan memerlukan penggantian manual. Sebagai gantinya, gunakan alat atau SDK dengan autentikasi terpadu untuk menangani manajemen token secara otomatis.
Gunakan prinsipal layanan terkelola Azure Databricks untuk sebagian besar kasus penggunaan. Hanya gunakan perwakilan layanan terkelola ID Microsoft Entra saat Anda perlu mengakses sumber daya Azure, karena memerlukan izin ID Microsoft Entra tambahan.
Kapan menggunakan pembuatan token manual
Gunakan pembuatan token manual hanya ketika:
- Anda perlu berintegrasi dengan sistem yang tidak dapat menggunakan Azure CLI atau autentikasi terpadu
- Anda memerlukan kontrol eksplisit atas siklus hidup dan refresh token
- Anda sedang men-debug masalah autentikasi
Untuk semua kasus penggunaan lainnya, gunakan metode autentikasi yang direkomendasikan yang menangani manajemen token secara otomatis.
Mendapatkan token untuk pengguna
Gunakan Azure CLI atau Microsoft Authentication Library (MSAL) untuk mendapatkan token akses ID Microsoft Entra untuk pengguna.
Metode Azure CLI
Dapatkan ID langganan Azure untuk akun pengguna Anda:
Dari ruang kerja Azure Databricks: Klik nama pengguna Anda di >Gambaran Umum, dan temukan >.
Dengan Azure CLI: Jalankan perintah berikut (ganti dengan URL ruang kerja Anda):
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-ws00000000-0000-0000-0000-000000000000yang setelah/subscriptions/adalah ID langganan Anda.Jika Anda mendapatkan kesalahan akun penyewa, login ke akun penyewa yang tepat.
az login -t <tenant-id>Lihat Mendapatkan ID langganan dan penyewa di portal Microsoft Azure.
Masuk ke Azure:
az loginAtur langganan yang benar:
az account set -s <subscription-id>Hasilkan token akses:
az account get-access-token \ --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d \ --query "accessToken" \ -o tsvID
2ff814a6-3304-4ab8-85cb-cd0e6f879c1dsumber daya adalah pengidentifikasi standar untuk Azure Databricks di semua lingkungan Azure.
Metode MSAL
Gunakan Microsoft Authentication Library (MSAL) untuk mendapatkan token akses ID Microsoft Entra secara terprogram. MSAL mendukung dua alur:
- Alur kode otorisasi (interaktif): Meluncurkan browser untuk masuk pengguna. Gunakan ini saat autentikasi dua faktor atau federasi diaktifkan, atau saat persetujuan admin diperlukan.
- Alur nama pengguna-kata sandi (terprogram): Mengautentikasi dengan nama pengguna dan kata sandi. Hanya gunakan ini ketika Anda memiliki otoritas untuk masuk secara terprogram.
Sebelum menggunakan MSAL, Anda harus mendaftarkan aplikasi di ID Microsoft Entra. Lihat Mendaftarkan aplikasi dengan menggunakan portal Microsoft Azure. Saat mendaftar:
- Atur Jenis akun yang didukung ke Akun dalam direktori organisasi ini saja (Penyewa tunggal).
-
Atur URI Pengalihan ke Klien publik/asli (seluler &desktop) dengan nilai
http://localhost. - Perhatikan ID Aplikasi (klien) dan ID Direktori (penyewa) dari halaman Gambaran Umum aplikasi.
- Tambahkan izin API AzureDatabricks :
- Buka Izin API>Tambahkan izin.
- Cari dan pilih AzureDatabricks.
- Aktifkan user_impersonation dan klik Tambahkan izin.
- Klik Berikan persetujuan admin (memerlukan hak istimewa admin).
Alur kode otorisasi
Instal MSAL Python SDK:
pip install msal
Simpan kode berikut sebagai 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']}")
Jalankan skrip:
python get-tokens.py <client-id> <tenant-id>
Alur nama pengguna-kata sandi
Simpan kode berikut sebagai 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']}")
Jalankan skrip:
python get-tokens-user.py <client-id> <tenant-id> <username> <password>
Mendapatkan token untuk perwakilan layanan
Perwakilan layanan menggunakan alur kredensial klien OAuth 2.0 dan dapat memiliki kontrol akses yang berbeda dari pengguna biasa.
Membuat "Service Principal"
Jika Anda tidak memiliki perwakilan layanan, buat perwakilan layanan menggunakan portal Microsoft Azure atau Azure CLI:
portal Azure
- Masuk ke portal Azure.
- Beralih ke tenant yang benar menggunakan Direktori + langganan jika diperlukan.
- Cari dan pilih MICROSOFT Entra ID.
- Klik + Tambahkan>Pendaftaran aplikasi.
- Masukkan Nama dan pilih Akun di direktori organisasi ini saja (Penyewa tunggal).
- Klik Daftar.
- Salin nilai-nilai ini dari halaman Gambaran Umum :
- ID Aplikasi (klien)
- ID direktori (penyewa)
- Buka
Sertifikat & rahasia Rahasia klien Rahasia klien baru . - Tambahkan deskripsi, atur periode kedaluwarsa, dan klik Tambahkan.
- Salin dan simpan Nilai rahasia klien dengan aman.
Azure CLI (antarmuka baris perintah Azure)
Lihat Membuat perwakilan layanan Azure dengan Azure CLI untuk instruksi lengkap.
Membuat token
Buat token menggunakan REST API atau Azure CLI. Kumpulkan informasi berikut terlebih dahulu:
- ID Penyewa:ID Direktori (penyewa) dari ID Microsoft Entra
- ID Klien:ID Aplikasi (klien) dari ID Microsoft Entra
- Rahasia klien:Nilai rahasia klien dari ID Microsoft Entra
Metode 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>'
Token akses berada di access_token bidang respons.
Metode Azure CLI
Dapatkan ID langganan Azure Anda. Lihat Mendapatkan token untuk pengguna.
Masuk dengan prinsipal layanan Anda:
az login \ --service-principal \ -t <tenant-id> \ -u <client-id> \ -p <client-secret>Atur langganan yang benar:
az account set -s <subscription-id>Hasilkan token akses:
az account get-access-token \ --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d \ --query "accessToken" \ -o tsv
Menggunakan token dengan API Databricks
Setelah membuat token, gunakan dengan Databricks REST API.
Prinsipal layanan di ruang kerja
Jika perwakilan layanan Anda sudah ditambahkan ke ruang kerja menggunakan API Perwakilan Layanan atau Databricks CLI:
Databricks CLI (antarmuka baris perintah)
databricks clusters list -p <profile-name-with-token>
melengkung
curl -X GET \
-H 'Authorization: Bearer <access-token>' \
https://<databricks-instance>/api/2.0/clusters/list
Perwakilan layanan dengan peran Azure
Jika perwakilan layanan Anda memiliki peran Contributor atau Owner pada sumber daya ruang kerja di Azure tetapi belum berada di ruang kerja Azure Databricks:
Dapatkan token manajemen untuk 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>'Panggil Databricks API dengan kedua token:
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
Setelah autentikasi pertama, perwakilan layanan menjadi admin ruang kerja.
Token penyegaran
Jika Anda mendapatkan token refresh dengan token akses Anda, gunakan untuk mendapatkan token baru. Token akses ID Microsoft Entra kedaluwarsa setelah 60-90 menit secara default.
Simpan kode berikut sebagai 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']}")
Jalankan skrip:
python refresh-tokens.py <client-id> <tenant-id> <refresh-token>
Mengatasi masalah token
Bagian ini menjelaskan kesalahan token umum dan cara memvalidasi token akses.
Gagal mendapatkan token dengan nama pengguna dan kata sandi
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.
Larutan: Pastikan sumber daya AzureDatabricks ditambahkan ke aplikasi Anda. Gunakan alur kode otorisasi (metode interaktif) untuk menyetujui izin. Setelah menyetujui, Anda dapat menggunakan alur nama pengguna-kata sandi. Lihat Mendapatkan token untuk pengguna.
URL pengalihan tidak cocok
The reply URL specified in the request does not match the reply URLs configured for the application: '<application-id>'
Solusi: Pastikan URI pengalihan dalam permintaan Anda sesuai dengan yang dikonfigurasi dalam aplikasi.
Memvalidasi token akses
Pastikan token akses ID Microsoft Entra Anda menyertakan informasi yang benar. Lihat memvalidasi token.
-
aud:
2ff814a6-3304-4ab8-85cb-cd0e6f879c1d(ID sumber daya Databricks) -
iss:
https://sts.windows.net/<tenant-id>/ - tid: ID penyewa ruang kerja
- nbf/exp: Waktu saat ini berada di antara nilai-nilai ini
- unique_name: Pengguna ada di ruang kerja
Validasi tanda tangan menggunakan sertifikasi publik dari titik akhir OIDC.
Dekode tanpa verifikasi tanda tangan:
Kode berikut menunjukkan payload dari token. Anda harus terlebih dahulu menginstal pustaka PyJWT menggunakan pip install pyjwt dan pustaka kriptografi menggunakan 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])}")
Dekode dengan verifikasi tanda tangan:
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])}")
Gunakan dekode JWT online seperti jwt.ms atau jwt.io untuk token yang tidak sensitif.