code: def verify(jws, jwk, alg, validate_claims=True, expiry_seconds=None):
      
      header, payload, sig = map(b64decode_url, jws)
      header = json_decode(header)
      if alg != header[HEADER_ALG]:
          raise Error('Invalid algorithm')
  
      (_, verify_fn), mod = JWA[header[HEADER_ALG]]
  
      if not verify_fn(_jws_hash_str(jws.header, jws.payload),
              jwk['k'], sig, mod=mod):
          raise Error('Mismatched signatures')
  
      claims = json_decode(b64decode_url(jws.payload))
      _validate(claims, validate_claims, expiry_seconds)
  
      return JWT(header, claims)
docs: Verifies the given :class:`~jose.JWS`
  
      :param jws: The :class:`~jose.JWS` to be verified.
      :param jwk: A `dict` representing the JWK to use for verification. This
                  parameter is algorithm-specific.
      :param alg: The algorithm to verify the signature with.
      :param validate_claims: A `bool` indicating whether or not the `exp`, `iat`
                              and `nbf` claims should be validated. Defaults to
                              `True`.
      :param expiry_seconds: An `int` containing the JWT expiry in seconds, used
                             when evaluating the `iat` claim. Defaults to `None`,
                             which disables `iat` claim validation.
      :rtype: :class:`~jose.JWT`
      :raises: :class:`~jose.Expired` if the JWT has expired
      :raises: :class:`~jose.NotYetValid` if the JWT is not yet valid
      :raises: :class:`~jose.Error` if there is an error decrypting the JWE