[Python] Unable to validate JWT from Azure

Discussão em 'Python' iniciado por Stack, Maio 31, 2025.

  1. Stack

    Stack Membro Participativo

    I am using Postman to retrieve a JWT from Azure, and I am writing a Python script to validate the JWT. I am expecting this function to return the verified, decoded content, but I keep getting a jwt.exceptions.InvalidSignatureError. Below is my code to validate the token. What am I doing wrong?

    import jwt
    from jwt.algorithms import RSAAlgorithm
    import requests
    from json import dumps
    from cryptography.hazmat.primitives import serialization

    tenant_id = "TENANT_ID"


    access_token = "REAL_TOKEN_HERE"
    header_unverified = jwt.get_unverified_header(access_token)
    kid = header_unverified['kid']

    # Get the public keys from Microsoft
    openid_config = requests.get(f"https://login.microsoftonline.com/{tenant_id}/.well-known/openid-configuration").json()
    jwks_uri = openid_config["jwks_uri"]
    issuer = openid_config["issuer"]

    public_keys_list = requests.get(jwks_uri).json()

    match = None
    for key in public_keys_list["keys"]:
    if key["kid"] == kid:
    match = key
    break

    if match is None:
    raise Exception("Matching key ID not found")


    public_key = RSAAlgorithm.from_jwk(dumps(match))
    pem = public_key.public_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PublicFormat.SubjectPublicKeyInfo
    )

    pem_str = pem.decode('utf-8')
    print(pem_str)
    decoded = jwt.decode(access_token, public_key, algorithms=["RS256"], audience="https://graph.microsoft.com", issuer=issuer)

    print(dumps(decoded, indent=4))

    Continue reading...

Compartilhe esta Página