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...