前夕U.R.A.不与HMAC合作

时间:2014-10-27 22:38:52

标签: python-3.x eve

run.py:

class HMACAuth(HMACAuth):
    def check_auth(self, userid, hmac_hash, headers, data, allowed_roles, resource, method):
        accounts = app.data.driver.db['accounts']
        user = accounts.find_one({'username': userid})
        if user and '_id' in user:
            secret_key = user['secret_key']
            self.set_request_auth_value(user['_id'])

        # in this implementation we only hash request data, ignoring the headers.
        hm = hmac.new(bytes(secret_key, encoding='utf-8'), data, sha1).digest()

        return user and base64.b64encode(hm).decode() == hmac_hash

settings.py:

vms = {
    'additional_lookup': {
        'url': 'regex("[\w]+")',
        'field': 'name',
    },
    'cache_control': '',
    'cache_expires': 0,
    'public_methods': [],
    'public_item_methods': [],
    'resource_methods': ['GET', 'POST'],
    'item_methods': ['GET','PATCH','DELETE'],
    'auth_field': 'user_id',
    'schema': vm_schema,
}

我的问题是每个用户在向localhost:5000/vms发送GET请求时都会收到所有虚拟机信息。
通过TokenAuth身份验证,这没有发生。
我错过了什么?

PS:Python 3.3.5上的Eve 0.5-dev

1 个答案:

答案 0 :(得分:0)

由于基于令牌的身份验证一切正常,并且因为这两种方法之间没有什么真正的不同,所以我会调查它的行为。

我首先检查文档是否实际存储了正确的user_id值,也许是使用mongo shell。如果没有,请确保您正在检查的文档已保存,并且您的自定义HMAC类处于活动状态。添加一个断点并跟踪你的代码,简单的东西。希望这有帮助