import base64 import json import structlog logger = structlog.get_logger(__name__) def decode_jwt(jwt: str): jwt_parts = jwt.split(".") try: payload_bytes = base64.urlsafe_b64decode(_correct_padding(jwt_parts[1])) payload = json.loads(payload_bytes.decode("UTF-8")) except Exception as e: logger.warning( f"OAuthToken error: Could not decode jwt: {e}", exc_info=True, label="sso" ) return None return payload # https://stackoverflow.com/questions/2941995/python-ignore-incorrect-padding-error-when-base64-decoding def _correct_padding(data: str) -> str: return f"{data}{'=' * (4 - len(data) % 4)}"