Felsöka Åtkomsttoken för Microsoft Entra-ID (tidigare Azure Active Directory)
Den här artikeln beskriver hur du felsöker fel som kan uppstå när du hämtar Åtkomsttoken för Microsoft Entra-ID (tidigare Azure Active Directory) och hur du verifierar åtkomsttoken.
Det gick inte att hämta token med användarnamn och lösenord
Felmeddelande
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.
Lösning
- Om AzureDatabricks-resursen inte har lagts till i ditt program ber du en administratörsanvändare att lägga till den.
- Använd den interaktiva metoden för att hämta token. På webbsidan får du hjälp med att bevilja behörigheter till programmet. Du kan också klicka på knappen Bevilja behörigheter som beskrivs i programkonfigurationen. När behörigheter har beviljats kan du använda den programmatiska metoden för att hämta token.
Omdirigerings-URI:er matchar inte
Felmeddelande
The reply url specified in the request does not match the reply urls configured for the application: '<application-id>'
Lösning
Kontrollera att omdirigerings-URI:n i din begäran matchar en av dem i programmet.
Verifiera en åtkomsttoken
När du har en Åtkomsttoken för Microsoft Entra-ID kan du kontrollera att den innehåller rätt information (se verifiera token).
Du bör kontrollera att följande fält matchar posten:
- aud: Resurs-ID:t för Azure Databricks:
2ff814a6-3304-4ab8-85cb-cd0e6f879c1d
- iss: Ska vara
https://sts.windows.net/<tenant-id>/
- tid: Ska vara klientorganisation för arbetsytan (leta upp detta antingen efter organisations-ID eller arbetsyteinstallations-ID)
- nbf/exp: Aktuell tid bör falla mellan
nbf
ochexp
- unique_name: Ska vara en användare som finns på Databricks-arbetsytan, såvida inte användaren är deltagare i arbetsyteinstallationsresursen
Verifiera tokens signatur med hjälp av offentliga certifikat från OIDC-slutpunkterna.
Här är ett kodfragment som visar nyttolasten för token. Du måste först installera PyJWT-biblioteket med hjälp av pip install pyjwt
och kryptografibiblioteket med hjälp av 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])}")
Om du vill ha en fullständig avkodning (inklusive signaturverifiering) av token kan du använda följande kodfragment. Du måste först installera PyJWT-biblioteket med hjälp av pip install pyjwt
och kryptografibiblioteket med .pip install cryptography
Se också till att ersätta <databricks-resource-id>
i följande kod:
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])}")
Här är ett exempel på utdata från kodfragmentet ovan:
Du kan också visa den avkodade token via JWT-avkodare online om de inte är känsliga. Exempel på onlinedekodare är jwt.ms och jwt.io.