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第三方库


热门话题
JPanel的java滚动窗格?   java JPA查询方法:findTopX,其中X是给定的(变量)数?   当应用程序在Oreo中处于后台时,java音乐服务在几秒钟后不工作   java通过TCP流发送密钥编码的字符串BadPaddingException with Windows   java在这里构建代码的更好方法是什么?   如何使用Java(无给定参数)检查列表中是否有数字   跨多个JVM的java事务控制   dataframe如何使用SparkJavaAPI的MapFunction和ReduceFunction在集群上并行处理这个问题?   java如何在多模块spring引导中配置yml文件   已安装java JDBC驱动程序,但出现异常   JUnit 4中的java,有没有一种方法可以在扩展BlockJUnit4ClassRunner的自定义运行程序中,在all@BeforeClass之前运行一段代码   继续未能选择JAVA上的radioButton   java如何通过PHP代码运行shell命令?   java JSlider SynthLookandFeel填充颜色   java给定一个数字,打印下三个数字   java SpringMVC(安全)403错误   java Graphhopper从装载的obb文件系统加载路由信息时出错   java安全工具扫描问题,发现依赖默认编码:新字符串(字节[])   java如何获取嵌套字段