http签名的请求认证模块

requests-http-signature的Python项目详细描述


请求http签名是一个Requestsauthentication pluginrequests.auth.AuthBase子类)实现 这是IETF HTTP Signatures draft RFC。它不需要 标准库之外的依赖项。如果您希望使用hmac以外的算法(即rsa和ecdsa算法 在rfc中指定),存在对cryptography的可选依赖项。

安装

$ pip install requests-http-signature

用法

importrequestsfromrequests_http_signatureimportHTTPSignatureAuthpreshared_key_id='squirrel'preshared_secret='monorail_cat'url='http://example.com/path'requests.get(url,auth=HTTPSignatureAuth(key=preshared_secret,key_id=preshared_key_id))

默认情况下,对于get之类的无正文请求,只有Date头被签名(根据rfc)。Date头 如果不存在,则设置为。此外,对于带有主体的请求(例如post),将Digest头设置为sha256 请求主体和签名的(RFC中有一个例子)。若要向签名添加其他头,请传递 header关键字参数中的头名称数组。

除了在客户机中签名消息之外,还可以使用类方法HTTPSignatureAuth.verify()来验证 传入请求:

defkey_resolver(key_id,algorithm):return'monorail_cat'HTTPSignatureAuth.verify(request,key_resolver=key_resolver)

非对称密钥算法(rsa和ecdsa)

对于非对称密钥算法,应该将私钥作为key参数提供给HTTPSignatureAuth() 以PEM格式字节表示的构造函数:

withopen('key.pem','rb')asfh:requests.get(url,auth=HTTPSignatureAuth(algorithm="rsa-sha256",key=fh.read(),key_id=preshared_key_id))

在验证时,key_resolver()回调应该以pem格式的字节形式提供公钥:

许可证

根据Apache License, Version 2.0条款授权。

https://travis-ci.org/kislyuk/requests-http-signature.pnghttps://codecov.io/github/kislyuk/requests-http-signature/coverage.svg?branch=masterhttps://img.shields.io/pypi/v/requests-http-signature.svghttps://img.shields.io/pypi/l/requests-http-signature.svghttps://readthedocs.org/projects/requests-http-signature/badge/?version=latest

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

推荐PyPI第三方库


热门话题
java同步块与私有不可变对象和同步方法的差异   OracleDataSource、OracleUCP、Commons DBCP和Tomcat连接池之间的java差异?   java在文本文件中写入对象   java访问web服务   如何用java代码并行读取拼花地板文件   spring是否可以将运行时未知的Avro消息转换为特定的Java类   具有复杂对象的java Spring数据MongoDB addToSet()   java ArrayList是否删除元素,是否向下移动列表?   Vaadin中按钮的java多行标题不起作用   java为什么要使用@PropertySource而不是PropertyPlaceHolderConfigure?   java如何检查网站链接是否有数据(图片)或网站是否无效?   java如何禁用对jsp页面的直接访问?   用java实现matlab递归文件夹读取。伊奥。文件   为什么是java。伊奥。FileDescriptor的构造函数是公共的吗?   在java中关闭扫描程序时无法访问的代码?   搜索Java模拟退火接受概率