django rest 框架 HMAC 模块中的标头字段有问题?



所以我一直在尝试利用djangorestframework-hmac模块(https://github.com/aaronlelevier/django-rest-framework-hmac(来保护带有HMAC的REST API。 但是我遇到了一个似乎是一个根本问题:与大多数HMAC方案一样,客户端需要将消息签名放在名为"签名"的标头字段中,但问题是标头字段名称由Django翻译("签名"变为"HTTP_SIGNATURE"(。
但是我可以在django-restframework-hmac的代码中看到服务器正在寻找一个名为"签名"的标头字段。现在该模块附带了一个示例,该示例有效,但在示例中,客户端正在运行 Django,我相信这可能以某种方式绕过了标头字段转换问题。 但是如果客户端没有使用 django 怎么办? 客户端怎么可能让服务器看到他的标头字段? 关于 django 使用标头字段名称的方式,我在这里缺少一些东西吗?

为了明确起见,这是我为测试客户端而发出的请求类型:

headers = {'Key': api_key, 'Signature': sig, 'Timestamp': t}
DJANGO_URL = '127.0.0.1:8000/testrest/'
r = requests.get(DJANGO_URL, headers=headers)

但是在 django 服务器端,如果我打印出请求。META字典,与我的每个标头字段对应的键被更改("签名"->"HTTP_SIGNATURE"等(。 然而,django HMAC代码正在请求中寻找一个名为"签名"的字段。元。 这种行为甚至在 Django 文档中也存在。

我只是想知道这是否是 django hmac 库中的错误,或者我是否没有正确发送我的请求或其他东西。

它看起来像djangorestframework-hmac中的一个错误 有人在 github 上创建了相同的问题

https://github.com/aaronlelevier/django-rest-framework-hmac/issues/4

我注意到这个库中的测试使用模拟请求,所以 django 永远不会重写标头,并且没有注意到该错误

https://github.com/aaronlelevier/django-rest-framework-hmac/blob/master/tests/test_authentication.py

最新更新