Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfada, Azure Databricks REST API'leri ile kimlik doğrulaması yapmak üzere kullanıcılar ve hizmet sorumluları için el ile Microsoft Entra ID erişim belirteçlerinin nasıl oluşturulacağı açıklanmaktadır. El ile belirteç oluşturma gelişmiş bir tekniktir.
Önemli
Databricks, Microsoft Entra Id belirteçlerinin el ile oluşturulmasını önermez. Bir saat içinde süresi dolar ve manuel olarak değiştirilmesi gerekir. Bunun yerine, belirteç yönetimini otomatik olarak işlemek için birleşik kimlik doğrulamasıyla araçları veya SDK'ları kullanın.
Çoğu kullanım örneği için Azure Databricks yönetilen hizmet sorumlularını kullanın. Ek Microsoft Entra Id izinlerine ihtiyaç duydukları için Yalnızca Azure kaynaklarına erişmeniz gerektiğinde Microsoft Entra ID yönetilen hizmet sorumlularını kullanın.
El ile belirteç oluşturma ne zaman kullanılır?
El ile belirteç oluşturmayı yalnızca aşağıdaki durumlarda kullanın:
- Azure CLI veya birleşik kimlik doğrulaması kullanamayan sistemlerle tümleştirmeniz gerekir
- Belirteçlerin yaşam döngüsü ve yenileme üzerinde doğrudan kontrol ihtiyacınız var
- Kimlik doğrulama sorunlarını ayıklıyorsunuz
Diğer tüm kullanım örnekleri için belirteç yönetimini otomatik olarak işleyen önerilen kimlik doğrulama yöntemlerini kullanın.
Kullanıcılar için belirteçleri al
Kullanıcılar için Microsoft Entra Id erişim belirteçlerini almak için Azure CLI'yi veya Microsoft Kimlik Doğrulama Kitaplığı'nı (MSAL) kullanın.
Azure CLI yöntemi
Kullanıcı hesabınızın Azure abonelik kimliğini alın:
Azure Databricks çalışma alanından: Kullanıcı adınızı >Azure Portala>Genel Bakış'a tıklayın ve Abonelik Kimliğini bulun.
Azure CLI ile: Aşağıdaki komutu çalıştırın (değerini çalışma alanı URL'nizle değiştirin):
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-wsSonraki
00000000-0000-0000-0000-000000000000/subscriptions/, abonelik kimliğinizdir.Kiracı hatasıyla karşılaşırsanız, doğru kiracıya oturum açın.
az login -t <tenant-id>
Azure'da oturum açın:
az loginDoğru aboneliği ayarlayın:
az account set -s <subscription-id>Erişim belirtecini oluşturun:
az account get-access-token \ --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d \ --query "accessToken" \ -o tsvKaynak kimliği
2ff814a6-3304-4ab8-85cb-cd0e6f879c1d, tüm Azure ortamlarında Azure Databricks için standart tanımlayıcıdır.
MSAL yöntemi
Microsoft Entra ID erişim belirteçlerini program aracılığıyla almak için Microsoft Kimlik Doğrulama Kitaplığı'nı (MSAL) kullanın. MSAL iki akışı destekler:
- Yetkilendirme kodu akışı (etkileşimli): Kullanıcı oturum açma için bir tarayıcı başlatır. İki öğeli veya federasyon kimlik doğrulaması etkinleştirildiğinde veya yönetici onayı gerektiğinde bunu kullanın.
- Kullanıcı adı-parola akışı (programlı): Kullanıcı adı ve parolayla kimlik doğrulaması yapar. Bunu yalnızca program aracılığıyla oturum açma yetkiniz olduğunda kullanın.
MSAL'yi kullanmadan önce bir uygulamayı Microsoft Entra Id'ye kaydetmeniz gerekir. Bkz . Azure portalını kullanarak uygulama kaydetme. Kayıt sırasında:
- Desteklenen hesap türleriniyalnızca bu kuruluş dizinindeki hesaplar (Tek kiracı) olarak ayarlayın.
-
Yeniden Yönlendirme URI'siniKamu istemcisi/yerel (mobil & masaüstü) olarak,
http://localhostdeğeriyle ayarlayın. - Uygulamanın Genel Bakışsayfasından Uygulama (istemci) Kimliği ve Dizin (kiracı) Kimliği'ne dikkat edin.
-
AzureDatabricks API iznini ekleyin:
- API izinleri> İzinekle'ye gidin.
- AzureDatabricks'i arayın ve seçin.
- user_impersonation etkinleştirin ve İzin ekle'ye tıklayın.
- Yönetici onayı ver'e tıklayın (yönetici ayrıcalıkları gerektirir).
Yetkilendirme kodu akışı
MSAL Python SDK'sını yükleyin:
pip install msal
Aşağıdaki kodu olarak get-tokens.pykaydedin:
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']}")
Betiği çalıştırın:
python get-tokens.py <client-id> <tenant-id>
Kullanıcı adı-parola akışı
Aşağıdaki kodu olarak get-tokens-user.pykaydedin:
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']}")
Betiği çalıştırın:
python get-tokens-user.py <client-id> <tenant-id> <username> <password>
Hizmet sorumluları için belirteçleri alma
Hizmet sorumluları OAuth 2.0 istemci kimlik bilgileri akışını kullanır ve normal kullanıcılardan farklı erişim denetimine sahip olabilir.
Hizmet sorumlusu oluşturma
Hizmet sorumlunuz yoksa Azure portalını veya Azure CLI'yı kullanarak bir hizmet sorumlusu oluşturun:
Azure portalı
- Azure portalınaoturum açın.
- Gerekirse Dizinler + abonelikler kullanarak doğru kiracıyı seçin.
- Microsoft Entra ID öğesini arayıp seçin.
- +Uygulama kaydı> tıklayın.
- Bir Ad girin ve Yalnızca bu kuruluş dizininde (Tek kiracı) Hesapları seçin.
- Kaydet’e tıklayın.
-
Genel Bakış sayfasından şu değerleri kopyalayın:
- Uygulama (istemci) kimliği
- Dizin (kiracı) ID'si
- Sertifikalar ve sırlar>İstemci sırları>Yeni istemci sırrı bölümüne gidin.
- Açıklama ekleyin, bir süre sonu ayarlayın ve Ekle'ye tıklayın.
- İstemci sırrını Değer kopyalayın ve güvenli bir şekilde saklayın.
Azure Komut Satırı Arayüzü (Azure CLI)
Tüm yönergeler için bkz. Azure CLI ile Azure hizmet sorumlusu oluşturma .
Belirteç oluşturma
REST API veya Azure CLI kullanarak belirteç oluşturma. Önce aşağıdaki bilgileri toplayın:
- Kiracı Kimliği: Microsoft Entra ID'den Dizin (kiracı) Kimliği
- İstemci Kimliği: Microsoft Entra Kimlik Bilgilerinden Uygulama (İstemci) Kimliği
- İstemci sırrı: Microsoft Entra ID'den istemci sırrı Değeri
REST API yöntemi
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>'
Erişim belirteci yanıt alanındadır access_token .
Azure CLI yöntemi
Azure abonelik kimliğinizi alın. Bkz. Kullanıcılar için belirteçleri alma.
Hizmet sorumlunuzla oturum açın:
az login \ --service-principal \ -t <tenant-id> \ -u <client-id> \ -p <client-secret>Doğru aboneliği ayarlayın:
az account set -s <subscription-id>Erişim belirtecini oluşturun:
az account get-access-token \ --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d \ --query "accessToken" \ -o tsv
Databricks API'leriyle belirteçleri kullanma
Belirteç oluşturduktan sonra onu Databricks REST API'siyle kullanın.
Çalışma alanında hizmet sorumluları
Hizmet sorumlunuz Hizmet Sorumluları API'sini veya Databricks CLI'sini kullanarak çalışma alanına zaten eklenmişse:
Databricks Komut Satırı Arayüzü (CLI)
databricks clusters list -p <profile-name-with-token>
Kıvrım
curl -X GET \
-H 'Authorization: Bearer <access-token>' \
https://<databricks-instance>/api/2.0/clusters/list
Azure rolüne sahip hizmet sorumluları
Hizmet sorumlunuzun Azure'daki Contributor çalışma alanı kaynağında veya Owner rolü varsa ancak henüz Azure Databricks çalışma alanında değilse:
Azure Resource Manager için bir yönetim belirteci alın:
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>'Her iki belirteçle de Databricks API'sini çağırın:
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
İlk kimlik doğrulamasından sonra hizmet sorumlusu çalışma alanı yöneticisi olur.
Belirteçleri yenileme
Erişim belirtecinizle bir yenileme belirteci aldıysanız, yeni bir belirteç almak için bu belirteci kullanın. Microsoft Entra Id erişim belirteçlerinin süresi varsayılan olarak 60-90 dakika sonra dolar.
Aşağıdaki kodu olarak refresh-tokens.pykaydedin:
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']}")
Betiği çalıştırın:
python refresh-tokens.py <client-id> <tenant-id> <refresh-token>
Belirteç sorunlarını giderme
Bu bölümde yaygın belirteç hataları ve erişim belirteçlerinin nasıl doğrulandığı açıklanmaktadır.
Kullanıcı adı ve parola ile token alınamadı
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.
Çözüm:AzureDatabricks kaynağının uygulamanıza eklendiğinden emin olun. İzinlere onay vermek için yetkilendirme kodu akışını (etkileşimli yöntem) kullanın. Onay verdikten sonra kullanıcı adı-parola akışını kullanabilirsiniz. Bkz. Kullanıcılar için belirteçleri alma.
Yeniden yönlendirme URI'leri eşleşmiyor
The reply URL specified in the request does not match the reply URLs configured for the application: '<application-id>'
Çözüm: İsteğinizdeki yeniden yönlendirme URI'sinin uygulamada yapılandırılan URI ile eşleştigini doğrulayın.
Erişim belirtecini doğrulama
Microsoft Entra ID erişim belirtecinizin doğru bilgileri içerdiğinden emin olun. Bkz. belirteçleri doğrulama.
-
aud:
2ff814a6-3304-4ab8-85cb-cd0e6f879c1d(Databricks kaynak kimliği) -
iss:
https://sts.windows.net/<tenant-id>/ - tid: Çalışma alanı kiracı kimliği
- nbf/exp: Geçerli saat bu değerler arasında kalıyor
- unique_name: Kullanıcı çalışma alanında var
OIDC uç noktalarındaki genel sertifikaları kullanarak imzayı doğrulayın.
İmza doğrulaması olmadan kodu çözme:
Aşağıdaki kod, belirtecin yükünü gösterir. Önce PyJWT kütüphanesini pip install pyjwt kullanarak ve kriptografi kütüphanesini pip install cryptography kullanarak yüklemeniz gerekir.
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])}")
İmza doğrulama ile kodu çözme:
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])}")
Hassas olmayan belirteçler için jwt.ms veya jwt.io gibi çevrimiçi JWT kod çözücüleri kullanın.