code: def get_jwt_claims(self, auth_token):
          
  
          def _decode_and_verify():
              jwt_claims = jwt.JWT().unpack(auth_token).payload()
              _verify_required_claims_exist(jwt_claims)
  
              issuer = jwt_claims[u"iss"]
              keys = self._jwks_supplier.supply(issuer)
              try:
                  return jws.JWS().verify_compact(auth_token, keys)
              except (jwkest.BadSignature, jws.NoSuitableSigningKeys,
                      jws.SignerAlgError) as exception:
                  raise suppliers.UnauthenticatedException(u"Signature verification failed",
                                                           exception)
  
          return self._cache.get_or_create(auth_token, _decode_and_verify)
docs: Decodes the auth_token into JWT claims represented as a JSON object.
  
          This method first tries to look up the cache and returns the result
          immediately in case of a cache hit. When cache misses, the method tries to
          decode the given auth token, verify its signature, and check the existence
          of required JWT claims. When successful, the decoded JWT claims are loaded
          into the cache and then returned.
  
          Args:
            auth_token: the auth token to be decoded.
  
          Returns:
            The decoded JWT claims.
  
          Raises:
            UnauthenticatedException: When the signature verification fails, or when
              required claims are missing.