django rest框架的http签名支持
drf-httpsig的Python项目详细描述
drf httpsig
简单的http签名 http签名 对django-rest-framework.org/" rel="nofollow">django-rest框架的身份验证支持
概述
http签名方案提供了一种实现http消息源认证和消息完整性的方法。类似于亚马逊的http signature scheme,它的许多服务都使用http signature scheme。http签名目前是ietf草案。
要求
- python 2.7、3.3+(目前测试到3.4)
- httpsig
安装
此模块使用setuptools并托管在pypi上,因此安装非常简单:
pip install drf-httpsig
这也应该安装包含所有魔法的httpsig模块;这个模块是纯drf胶水(应该是这样的)。
您还可以从存储库的克隆中运行setup.py
python setup.py install
请注意,如果您这样做,具有版本要求的模块可能会尝试重新安装该模块,因为 versioner 可能会报告不同的版本,特别是如果您的repo克隆有任何未提交/未标记的更改。
运行测试
要运行模块的测试,请在存储库根目录上使用以下命令:
python setup.py test
注意,测试取决于 django nose ,它将在测试之前安装。您还可以使用包含的 tox.ini 文件运行 tox 测试,该文件有助于自动将所有测试依赖项保存在一个VenV中。
< Buff行情> 毒性-E Py27,Py32,…用法
要使用此模块实际验证http请求,需要扩展 SignatureAuthentication 类,如下所示:
α-αα4- 配置DRF以使用您的身份验证类;例如:
# my_project/settings.py# ...REST_FRAMEWORK={'DEFAULT_AUTHENTICATION_CLASSES':('my_api.auth.MyAPISignatureAuthentication',),'DEFAULT_PERMISSION_CLASSES':('rest_framework.permissions.IsAuthenticated',)}# The above will force HTTP signature for all requests.# ...
支持
请在问题跟踪程序中提交任何问题。也欢迎您通过拉取请求提供功能和修复。
示例用法和会话w/curl
假设上面详细介绍了设置,那么可以使用curl探测在 localhost:8000 上运行的项目,如下所示:
# Pre-calculate this first bit. ~$ SSS=Base64(Hmac(SECRET, "Date: Mon, 17 Feb 2014 06:11:05 GMT", SHA256)) ~$ curl -v -H 'Date: "Mon, 17 Feb 2014 06:11:05 GMT"' -H 'Authorization: Signature keyId="my-key",algorithm="hmac-sha256",headers="date",signature="SSS"'
而且,使用模块 请求 和 httpsig :
importrequestsfromhttpsig.requests_authimportHTTPSignatureAuthKEY_ID='su-key'SECRET='my secret string'signature_headers=['(request-target)','accept','date','host']headers={'Host':'localhost:8000','Accept':'application/json','Date':"Mon, 17 Feb 2014 06:11:05 GMT"}auth=HTTPSignatureAuth(key_id=KEY_ID,secret=SECRET,algorithm='hmac-sha256',headers=signature_headers)req=requests.get('http://localhost:8000/resource/',auth=auth,headers=headers)print(req.content)