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
  1. 配置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)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java查找事件分派线程冲突   java画布。DrawBitmap()不会在安卓上绘制任何内容!!:(   ruby+appium或java+appium用于移动本机应用程序自动化   java Jersey REST字符编码   java使用json将字符串转换为Arraylist   java如何在Groovy中检查字符串是否与模式匹配   java如何在抽象arraylist中添加抽象arraylist   Java servlets,JSP更改内容od DIV   java在J2ME中通过http发送和接收数据,并处理菜单和屏幕   Jar文件与JAVA类路径的结合   java按钮不可见,它将连接安卓 studio中的另一个活动   java是否可以使用SFTP JSch库进行多部分文件上载?   facelet中ui:composition和ui:decoration的java差异   java得到的数字不能被任何东西除   java logback:SizeAndTimeBasedRollingPolicy不删除包含4位“%i”的文件   java数据库管理器将连接“借用”到数据库   java javaFx标签wrapText不起作用   java是否可以在同一个系统上同时运行两台服务器?或者,当XAMPP/WAMP未运行时,如何在Eclipse中执行MySQL查询?   递归Java编程