Microsoft Entra Id erişim belirteçleriyle ilgili sorunları giderme
Bu makalede, Microsoft Entra ID erişim belirteçlerini alırken karşılaşabileceğiniz hataları giderme ve erişim belirteçlerini doğrulama işlemleri açıklanmaktadır.
Kullanıcı adı ve parola kullanılarak belirteç alınamadı
Hata İletisi
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ğı uygulamanıza eklenmiyorsa Yönetici kullanıcıdan bunu eklemesini isteyin.
- Belirteci almak için etkileşimli yöntemi kullanın. Web sayfası, uygulamaya izinler verme konusunda size yol gösterir. Alternatif olarak, uygulama yapılandırmasında açıklanan İzin ver düğmesine tıklayın. İzinler verildikten sonra, belirteci almak için programlama yöntemini kullanabilirsiniz.
Yeniden yönlendirme URI'leri eşleşmiyor
Hata İletisi
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 uygulamadakilerden biriyle eşleşerek eşleşmediğini denetleyin.
Erişim belirtecini doğrulama
Microsoft Entra ID erişim belirtecinin doğru bilgileri içerdiğini doğrulayabilirsiniz (bkz . belirteçleri doğrulama).
Aşağıdaki alanların kayıtla eşleştiklerini doğrulamanız gerekir:
- aud: Azure Databricks kaynak kimliği:
2ff814a6-3304-4ab8-85cb-cd0e6f879c1d
- iss: Olmalıdır
https://sts.windows.net/<tenant-id>/
- tid: Çalışma alanının kiracısı olmalıdır (bunu kuruluş kimliğine veya çalışma alanı gereci kimliğine göre arayın)
- nbf/exp: Geçerli saat ve arasında
nbf
olmalıdırexp
- unique_name: Kullanıcı çalışma alanı gereci kaynağında katkıda bulunan değilse Databricks çalışma alanında bulunan bir kullanıcı olmalıdır
OIDC uç noktalarındaki genel sertifikaları kullanarak belirtecin imzasını doğrulayın.
Burada belirtecin yükünü gösteren bir kod parçacığı yer alır. Önce kullanarak PyJWT kitaplığını pip install pyjwt
ve kullanarak pip install cryptography
şifreleme kitaplığını 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])}")
Belirtecin tam kodunun çözülmesini (imza doğrulaması dahil) istiyorsanız aşağıdaki kod parçacığını kullanabilirsiniz. Önce kullanarak PyJWT kitaplığını pip install pyjwt
ve kullanarak pip install cryptography
şifreleme kitaplığını yüklemeniz gerekir. Ayrıca, aşağıdaki kodu değiştirdiğinden <databricks-resource-id>
emin olun:
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'
# Get the Microsoft Azure public key.
def get_public_key_for_token(kid):
response = requests.get(
'https://login.microsoftonline.com/common/.well-known/openid-configuration',
).json()
jwt_uri = response['jwks_uri']
response_keys = requests.get(jwt_uri).json()
pubkeys = response_keys['keys']
public_key = ''
for key in pubkeys:
# Find the key that matches the kid in the token's header.
if key['kid'] == kid:
# Construct the public key object.
mspubkey = str(key['x5c'][0])
cert_str = PEMSTART + mspubkey + PEMEND
cert_obj = load_pem_x509_certificate(bytes(cert_str, 'ascii'), default_backend())
public_key = cert_obj.public_key()
return public_key
# Decode the given <ms-entra-id> token.
def aad_access_token_decoder(access_token):
header = jwt.get_unverified_header(access_token)
public_key = get_public_key_for_token(header['kid'])
# The value of the databricks_resource_id is as defined previously,
# for example, databricks_resource_id = "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d"
decoded = jwt.decode(
access_token,
key = public_key,
algorithms = 'RS256',
audience = '<databricks-resource-id>')
for key in decoded.keys():
print(f"{key}: {str(decoded[key])}")
Yukarıdaki kod parçacığından alınan çıktının bir örneği aşağıda verilmiştir:
Kodu çözülen belirteci, hassas olmayan çevrimiçi JWT kod çözücüleri aracılığıyla da görüntüleyebilirsiniz. Çevrimiçi kod çözücülere örnek olarak jwt.ms ve jwt.io verilebilir.