跳转到主要内容

Hawk访问认证协议

项目描述

这是一个实现Hawk访问认证的低级别库,该认证方案是一种简单的HTTP请求签名方案,在以下链接中描述:

https://npmjs.net.cn/package/hawk

要使用Hawk访问认证访问资源,客户端必须获取一组Hawk凭证,包括id和密钥。他们使用这些凭证对服务器进行签名请求。

当访问受保护的资源时,服务器将生成一个包含“Hawk”方案的401挑战响应,如下所示

> GET /protected_resource HTTP/1.1
> Host: example.com

< HTTP/1.1 401 Unauthorized
< WWW-Authenticate: Hawk

客户端将使用他们的Hawk凭证构建请求签名,并将其包含在Authorization头中,如下所示

> GET /protected_resource HTTP/1.1
> Host: example.com
> Authorization: Hawk id="h480djs93hd8",
>                     ts="1336363200",
>                     nonce="dj83hs9s",
>                     mac="bhCQXTVyfj5cmA9uKkPFx1zeOXM="

< HTTP/1.1 200 OK
< Content-Type: text/plain
<
< For your eyes only:  secret data!

此库提供了实现此类认证方案所需的低级别函数。对于Hawk Auth客户端,它提供了以下功能

  • sign_request(req, id, key, algorithm="sha256"): 使用Hawk访问认证对请求进行签名。

对于Hawk Auth服务器,它提供了以下功能

  • get_id(req): 从请求中获取声明的Hawk Auth id。

  • check_signature(req, key, algorithm="sha256"): 检查请求是否使用给定的密钥签名。

传递给这些函数的请求对象可以是各种常见对象类型之一

  • 一个WSGI环境字典

  • 一个webob.Request对象

  • 一个requests.Request对象

  • 请求数据的字符串或文件-like对象

客户端程序的典型用法可能是将sign_request函数安装为认证钩子,当使用requests库时,如下所示

import requests
import functools
import hawkauthlib

# Hook up sign_request() to be called on every request.
def auth_hook(req):
    hawkauthlib.sign_request(req, id="<AUTH-ID>", key="<AUTH-KEY>")
    return req
session = requests.session(hooks={"pre_request": auth_hook})

# Then use the session as normal, and the auth is applied transparently.
session.get("http://www.secret-data.com/get-my-data")

服务器程序的典型用法可能是使用WSGI中间件组件验证请求,如下所示

class HawkAuthMiddleware(object):

    # ...setup code goes here...

    def __call__(self, environ, start_response):

        # Find the identity claimed by the request.
        id = hawkauthlib.get_id(environ)

        # Look up their secret key.
        key = self.SECRET_KEYS[id]

        # If the signature is invalid, error out.
        if not hawkauthlib.check_signature(environ, key):
            start_response("401 Unauthorized",
                           [("WWW-Authenticate", "Hawk")])
            return [""]

        # Otherwise continue to the main application.
        return self.application(environ, start_response)

Hawk协议的以下功能尚未支持

  • Beats。

  • 时间戳调整。

  • 计算或验证服务器的响应签名。

  • 计算或验证有效载荷哈希值。

2.0.0 - 2016-01-16

  • 兼容 Py27, Py35

0.1.1 - 2013-11-12

  • 让密钥为任何二进制字符串;id 必须仍然是 ascii。

0.1.0 - 2013-08-19

  • 初始版本;这基本上是 macauthlib 代码库,已移植到新的 Hawk 认证规范。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

hawkauthlib-2.0.0.tar.gz (14.9 kB 查看哈希值)

上传时间 源代码

构建版本

hawkauthlib-2.0.0-py2.py3-none-any.whl (32.4 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持