http签名的请求认证模块
requests-http-signature-jaywink的Python项目详细描述
请求http签名是一个Requestsauthentication plugin(requests.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格式的字节形式提供公钥:
链接
- IETF HTTP Signatures draft
- https://github.com/joyent/node-http-signature
- Project home page (GitHub)
- Documentation (Read the Docs)
- Package distribution (PyPI)
- Change log
虫子
请在GitHub上报告错误、问题、功能请求等。