django rest框架的http签名支持

djangorestframework-httpsignature的Python项目详细描述


https://travis-ci.org/etoccalino/django-rest-framework-httpsignature.png?branch=master

Overview

Django REST framework提供HTTP Signature支持。http签名包提供了一种实现http消息的源身份验证和消息完整性的方法。类似于亚马逊的HTTP Signature scheme,被亚马逊的许多服务所使用。HTTP Signature规范目前是ietf草案。

Installation

通过存储库安装软件包:

pip install djangorestframework-httpsignature

较旧版本的pip不支持轮盘格式(这就是httpsig的分发方式)。安装需求时出现问题,pip将抱怨找不到httpsig。在这种情况下,pip需要升级:

pip install --upgrade pip

另一个可能的问题:通过python setup.py install安装时,可能会遇到:

No local packages or download links found for httpsig
error: Could not find suitable distribution for Requirement.parse('httpsig')

如果是这样,请使用pip install httpsig安装httpsig包,然后重试python setup.py install

Running the tests

要运行包的测试,请在存储库根目录上使用以下命令:

python manage.py test

Usage

要通过http签名验证http请求,您需要:

  1. 按照Installation中的说明,在django项目中安装此包。

  2. rest_framework_httpsignature添加到已安装的settings.py应用程序中。

  3. 在应用程序代码中,扩展SignatureAuthentication类,如下所示:

    # my_api/auth.py
    
    from rest_framework_httpsignature.authentication import SignatureAuthentication
    
    class MyAPISignatureAuthentication(SignatureAuthentication):
        # The HTTP header used to pass the consumer key ID.
        # Defaults to 'X-Api-Key'.
        API_KEY_HEADER = 'X-Api-Key'
    
        # A method to fetch (User instance, user_secret_string) from the
        # consumer key ID, or None in case it is not found.
        def fetch_user_data(self, api_key):
            # ...
            # example implementation:
            try:
                user = User.objects.get(api_key=api_key)
                return (user, user.secret)
            except User.DoesNotExist:
                return None
    
  4. 配置django rest框架以使用身份验证类;例如:

    # 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.
    # ...
    

Roadmap

  • 目前,库只支持hmac sha256进行签名。
  • REQUIREMENTS.txt文件相当严格。很有可能以前的django和django rest框架版本是受支持的。
  • 由于http签名对请求日期和时间使用http头,身份验证类可以处理请求到期。

Example usage & session w/cURL

假设在Usage中详细介绍了设置,那么可以使用curl探测在localhost:8000上运行的项目,如下所示:

~$ 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 package文档以使用requestshttpsig

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

推荐PyPI第三方库


热门话题
java垂直解析txt文件   如何在从ovf部署vm时使用vi java api指定IP地址?   使用部分密钥进行java AES256解密   我无法接收RESTJava ws作为JSONObject发送到我的安卓应用程序的布尔值   java以下同步块的目的是什么?   java小部件在进入应用程序时停止更新   java如何在Okhttp中使用Socks5代理来启动http请求   java Android多资源库项目   java使用条形码4J创建gif条形码   java Play测试数据持久性问题使用GET时,发布的数据不可用   java Jnlp在证书中给出错误   java将我的exist服务器连接到GCM   AChartEngine中XAxis标题和XAxis标签之间的java边距   java BLOb:无法读取所有数据,但只有很少的kb   java Android WebView未加载Instagram授权   JAVAutil。日志记录可以指定一个java。util。通过D选项或不需要更改代码的某种方式创建日志格式化程序?   windows如何在Inno安装程序的路径中查找应用程序(Java)   java如何使用Jgit API调用“git checkout m”?   客户端Java服务器:通过广播在讲师和学生之间进行会议