Django的HTTP SHA1 HMAC身份验证后端
django-fost-authn的Python项目详细描述
Django FOST身份验证
django实现请求签名的身份验证后端 强大的密码学。它基于请求签名机制 由Amazon为S3实现。
请求和url都可以签名。请求签名用于 用户代理本身能够执行签名(即它知道api 钥匙和秘密)。在需要验证的地方使用url签名 委托给用户代理无法(或不受信任)签名 请求。
在django项目中使用
将git存储库添加到pip安装文件中,然后使用:
pip install -r setup.pip
在settings.py中需要添加中间件。没关系的 在中间件列表中添加位置:
MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'fost_authn.Middleware', )
除非您已经添加了自定义身份验证后端 settings.py可能还没有身份验证后端 开始吧。下面将启用正常的django身份验证 (基于表单/会话)和FOST身份验证:
AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', 'fost_authn.FostBackend', )
为了能够认证请求,认证后端 需要知道如何将api密钥映射到机密和用户。
通过将函数赋给 秘密设置。如果未配置,则 默认实现将使用用户密码的sha1散列 字段。这样可以确保即使用户更改了密码也会更改 他们的密码是因为盐的变化 储存在野外。
下面是一个可以放入settings.py的示例。
def FOST_AUTHN_GET_SECRET(request, key): from myapp.models import api_keys return api_keys.objects.get(key=key).secret
对现有Django类的修改< EH3>
在安装身份验证中间件之后,django httprequest 对象被一个新成员(signed)扩充,该成员是dict 保存已签名的请求头成员。如果请求没有 正确签名此dict将为空。
可选设置
睡眠时间被忽略
当FOST授权头为 不正确。默认为0.5秒。
最大时钟偏差
请求时的最大允许差值 签名和服务器上的时间。默认为300秒。
签署请求
为了根据后端请求进行身份验证,必须正确地 签署。` fost_auth.signature'包含两个用于执行此操作的函数 可以用的。
fost_hmac_request_signature(secret, method, path, timestamp, headers = {}, body = '')
报头以dict的形式给出报头名称和值。 函数返回签名和 签署。
调用者有责任正确放置标题 要使用的请求对象中的值,包括 Authorization标题。
运行测试
为了获得最佳结果,请创建一个virtualenv,然后用test.pip初始化它。:
mkvirtualenv django-fost-authn pip install -r test.pip
使用以下命令运行测试:
./runtest