def decode_jwt_token(token, secret):
try:<EOL><INDENT>decoded_token = jwt.decode(<EOL>token,<EOL>key=secret.encode(),<EOL>verify=True,<EOL>algorithms=[__algorithm__],<EOL>leeway=__bound__<EOL>)<EOL>if '<STR_LIT>' not in decoded_token:<EOL><INDENT>raise TokenIssuerError<EOL><DEDENT>if '<STR_LIT>' not in decoded_token:<EOL><INDENT>raise TokenIssuedAtError<EOL><DEDENT>now = epoch_seconds()<EOL>iat = int(decoded_token['<STR_LIT>'])<EOL>if now > (iat + __bound__):<EOL><INDENT>raise TokenExpiredError("<STR_LIT>", decoded_token)<EOL><DEDENT>if iat > (now + __bound__):<EOL><INDENT>raise TokenExpiredError("<STR_LIT>", decoded_token)<EOL><DEDENT>return True<EOL><DEDENT>except jwt.InvalidIssuedAtError:<EOL><INDENT>raise TokenExpiredError("<STR_LIT>", decode_token(token))<EOL><DEDENT>except jwt.DecodeError:<EOL><INDENT>raise TokenDecodeError<EOL><DEDENT>
Validates and decodes the JWT token
Token checked for
    - signature of JWT token
    - token issued date is valid

:param token: jwt token
:param secret: client specific secret
:return boolean: True if valid token, False otherwise
:raises TokenIssuerError: if iss field not present
:raises TokenIssuedAtError: if iat field not present
:raises jwt.DecodeError: If signature validation fails