class_docstr: Signs and verifies JWT Token. Used to authorise and verify requests.
  
  :param secret_key: key used to sign the request
  :param expiration_time_in_seconds: time after which the token becomes invalid (in seconds)
  :param audience: audience that the request is expected to have
  :param leeway_in_seconds: leeway that allows for a small clock skew between the two parties
  :param algorithm: algorithm used for signing
code: def __init__(
      self,
      secret_key: str,
      expiration_time_in_seconds: int,
      audience: str,
      leeway_in_seconds: int = 5,
      algorithm: str = "HS512",
  ):
      self._secret_key = secret_key
      self._expiration_time_in_seconds = expiration_time_in_seconds
      self._audience = audience
      self._leeway_in_seconds = leeway_in_seconds
      self._algorithm = algorithm
  
imports: from __future__ import annotations
  from datetime import datetime, timedelta
  from typing import Any
  import jwt
label_desc: Use image node_id 1 to create a new JWTSigner object  with example: obj = JWTSigner(secret_key, expiration_time_in_seconds, audience, leeway_in_seconds, algorithm)