http签名的请求认证模块

requests-http-signature-jaywink的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将Int值传递给另一个类   在使用Sdin(或非交互式)输入| Java时调试奇怪的输入错误   java返回一个文本字符串作为响应struts2   java为什么我们不能在声明局部变量之前初始化它呢?   java从现有XML中读取值并将其填充到Json中   java Spring Boot+Maven:找不到repositoryFactoryBean   java使用regex表示“W o.Rd”。replaceAll(“单词”、“替换”)   java Sub resorce在Jersey REST API框架中不起作用   java在组件启动时,当所述报告存储在Sharepoint中时,是否可以加载预格式化的WebDataRocks报告?   java并发更新列表的最佳方法   servlets Java web应用程序对象调度   应用程序在点击按钮时崩溃,Android Studio(Java)   java如何为掷骰子游戏调用另一个类中的方法?