0

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,
}

私の問題は、すべてのユーザーが GET 要求を に送信すると、すべての VM 情報を受信して​​いることlocalhost:5000/vmsです。認証では
、これは起こりませんでした。私は何が欠けていますか?? PS: Python 3.3.5 の Eve 0.5-devTokenAuth


4

1 に答える 1

0

トークン ベースの認証ではすべてが正常に機能しており、カスタム クラス自体を期待する 2 つの方法の間に実際の違いは何もないため、その動作について調査します。

user_idおそらくmongoシェルを使用して、ドキュメントが実際に適切な値で保存されているかどうかを確認することから始めます。そうでない場合は、検査しているドキュメントがカスタム HMAC クラスをアクティブにして保存されていることを確認してください。ブレークポイントを追加してコードを追跡する、といった単純なことです。お役に立てれば

于 2014-10-28T10:15:29.933 に答える