docs: def createJWT(self, payload={}, expiredSeconds=3600):
          """ 生成token: https://tools.ietf.org/html/rfc7519
          @param payload dict: 自定义公有或私有载荷, 存放有效信息的地方;
          @param expiredSeconds int: Token过期时间,单位秒,签发时间是本地当前时间戳,此参数指定签发时间之后多少秒过期;
          """
          #1. check params
          if isinstance(payload, dict):
              for i in self._payloadkey:
                  if i in payload:
                      raise KeyError("Standard key exists in payload")
          else:
              raise TypeError("payload is not a dict")
  
          #2. predefined data
          payload.update(self._payload)
          payload.update(
              exp=self.timestamp_after_timestamp(self.get_current_timestamp(), seconds=expiredSeconds),
              iat=self.get_current_timestamp()
          )
  
          #3. base64 urlsafe encode
          #头部编码
          first_part  = base64.urlsafe_b64encode(json.dumps(self._header, sort_keys=True, separators=(',', ':')))
          #载荷消息体编码
          second_part = base64.urlsafe_b64encode(json.dumps(payload, sort_keys=True, separators=(',', ':')))
          #签名以上两部分: 把header、playload的base64url编码加密后再次base64编码
          third_part  = base64.urlsafe_b64encode(self.signatureJWT("{0}.{1}".format(first_part, second_part)))
  
          #4. returns the available token
          token = first_part + '.' + second_part + '.' + third_part
          logging.info("Generating token ok")
          return token