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如何在数据库中插入行时自动发送电子邮件?   从进程输出读取的Java问题   java质疑StyledDocument和JTextPane之间的关系,以及接口的正确使用   java错误getPlayer(args[0]);   java如何使Spring引导在重新打包的WAR中包含清单文件?   Java中的除法与模   java使用2d数组和JfreeChart制作散点图   java扩展SonarQube FindBugs插件和自定义FindBugs插件   javaspring:hibernate+ehcache   具有不正确的equals和HashCode实现的java HashMap   java Jaspersoft报告网。旧金山。jasperreports。发动机例外:net。旧金山。jasperreports。发动机填满JRepressionEvalException:计算表达式时出错   java如果输入与其变量不匹配,如何添加错误   在java中使用简单数组[]实现队列   无法启动上下文路径/hsx上的java FAIL应用程序