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

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

推荐PyPI第三方库


热门话题
java Android使用两个后台服务错误   解压缩HTTPInputStream时,java GZIPInputStream过早关闭   javax和javax的区别是什么。网ssl。密钥库和服务器。ssl。为SpringBoot应用程序指定密钥库时的密钥库属性   java生成两个JPanel,而我只需要一个   java深度链接从play store安装应用程序时获取数据   java 安卓应用程序在退出时未正确释放蓝牙   java正确使用setCellValueFactory   java开放JdbcTemplate连接处于只读模式?   使用Spring MVC创建服务时发生java错误   JavaFX获取安装在计算机中的特定应用程序的版本   SecureRandom的安全问题:PRNG在java 1.5中不一致   windows我可以创建一个独立的。带Inno设置的Java应用程序的exe安装程序?   如何使用JavaServlet下载csv文件?   java从生成的缓冲图像中添加图像作为jasper中的数据记录?   java日期和时间解析