def METHOD_NAME(self, id_token):
    """
    Decode and validate JWT token from apple and return payload including
    user data.
    """
    if not id_token:
        raise AuthFailed(self, "Missing id_token parameter")
    try:
        kid = jwt.get_unverified_header(id_token).get("kid")
        public_key = RSAAlgorithm.from_jwk(self.get_apple_jwk(kid))
        decoded = jwt.decode(
            id_token,
            key=public_key,
            audience=self.get_audience(),
            algorithms=["RS256"],
        )
    except PyJWTError as error:
        raise AuthFailed(self, f"Token validation failed by {error}")
    return decoded