签名装饰器
def check_sign(handler_func): """ 验证签名 :param func handler_func: 请求处理函数 """ @functools.wraps(handler_func) @tornado.gen.coroutine def wrapper(self, *args, **kwargs): """ wrapper """ # 校验签名 data = dict(urlparse.parse_qsl(self.request.body)) sign, client_id = data['sign'], data['client_id'] res = DBMeta().get_secret(client_id) if not res: self.send_json(SysCodeDict.ACCESS_DENIED, None, 'Access denied') raise tornado.gen.Return(None) # 请求计数 today = datetime.datetime.now().strftime('%Y-%m-%d') CacheService().set_incr_cache('%s_%s' % (today, client_id)) data.pop("sign", None) str_data = "&".join(["%s=%s" % (k, v) for k, v in sorted(data.items()) if v != ""]) secret = res['secret'] data_to_sign = "%s&%s&%s" % (secret, str_data, secret) logging.info(hashlib.md5(data_to_sign).hexdigest()) if sign != hashlib.md5(data_to_sign).hexdigest(): self.send_json(SysCodeDict.AUTH, None, 'Signature failure') raise tornado.gen.Return(None) # 执行函数 yield handler_func(self, *args, **kwargs) return wrapper
梦想随心,天地随行