金字塔的加密签名查询参数
pyramid-signed-params的Python项目详细描述
说明
这个包为pyramid应用程序提供了一个签名参数的方法 在查询字符串(或post主体)中传递的。
最初的动机是能够通过return_url 不将应用程序转换为打开的重定向程序。
其他用例包括能够生成url(例如包括在 电子邮件)可用于绕过正常的身份验证/授权 机制。
安装
Pyramid-signed-params可以使用pip从PyPI安装,或者 easy_install(或buildout)您可能应该在虚拟机中安装它 环境。
配置
必须在应用程序设置中配置至少一个签名密钥。 秘密应该是一个随机的,不可加密的字符串。例如,在你的应用程序中 .ini文件:
pyramid_signed_params.secret = RGWO7nZ6W6AiPIUcXQN2iahJIThwH9BbpyZ7Lc1XfaOkPGt1GY
提示
您可以指定多个签名密钥(每行一个)。 是的,第一个密钥将用于签名,而所有密钥将 验证签名时尝试。这在滚动时很有用 拿出一个新的签名密钥。
通过将包包含在金字塔应用程序中来激活它。
config.include('pyramid-signed-params')
这将向金字塔的request添加两个新属性。
request.sign_query(query, max_age=None, kid=None)
用于签署查询参数,例如
# Pass the current URL as a signed *return_url* parameter to another viewquery={'return_url':request.url}other_url=request.route_url('other',_query=request.sign_query(query))
参数max_age可用于生成在某个 时间量。
传递kid="csrf"将创建 每当会话的csrf令牌更改时无效。
request.signed_params
这个reified属性将包含一个用all填充的multidict 传递给请求的参数已使用有效的 签名。
基本用法示例
构造一个可以通过电子邮件发送的url,以允许更改 给定用户的密码:
# Construct a URL with some signed parameters params = {'userid': 'fred', 'action': 'change-pw'} signed_params = request.sign_query(params, max_age=3600) url = request.route_url('change-pw', _query=signed_params)
然后,在“更改pw”视图中:
if request.signed_params['action'] != 'change-pw': raise HTTPForbidden() userid = request.signed_params['userid'] # Do whatever needs to be done to change the given users password
注意,因为我们将max_age=3600传递给了sign_query,所以 url只能工作一个小时。
小心
此包不提供针对重播攻击的固有保护。 如果攻击者有权访问一组签名参数,他可以通过 那些未经修改的签名参数,指向应用程序中的任何url(或 其他应用程序共享相同的签名密钥。)
更改
下一版本0.1b5(2018-03-08)
- 在PyJWT1.6中使用新的更具体的InvalidSignatureError 赞成使用泛型DecodeError来检测无效签名 (如果有。)
测试
- 在PyJWT1.6和1.5.3下测试。
- 修复pytest3.4中默认日志级别的更改。
- 从pytest3.3开始,pytest-catchlog已经被卷进pytest核心。
发布0.1b4(2017-12-18)
包装
- 放下CPython 3.3分类器
发布0.1b3(2017-12-18)
兼容性
- 放弃对Python3.3的支持。
包装
- 在sdist中包含license.txt和pytest.ini。
发布0.1b2(2017-11-16)
- 更改signed_params具体化请求方法,以便 访问request.params时捕获UnicodeDecodeErrors, 并返回一个空的dict。(如果参数不正确 已编码,没有有效的有符号参数。)
发布0.1b1(2017-11-16)
- 放弃对Python2.6的支持。在Python3.6下测试。
安全性
- 在解码jwts时显式指定允许的算法。
版本0.1a5(2016-11-13)
- 删除(中断的)配置时间警告如果没有服务 注册为ISignedParamsService。(当autocommit是 关闭,始终会发出此警告。)
版本0.1A4(2016-11-02)
- 配置JWT签名密钥的设置 从重命名为pyramid_signed_param.secret。 pyramid_signed_param.secrets。基本用法只涉及一个 秘密。(两个允许秘密轮换,任何配置的秘密都是 在验证签名时接受,但只有第一个用于 创建新签名。)
- Pyramid_signed_params.include如果 ISignedParamsService未配置。
- JWTSecretProviderFactory现在引发一个ConfigurationError 如果在应用程序settings中找不到机密。
版本0.1a3(2016-11-02)
初次发布。