我正在进行EC2 API查询并面临错误“我们计算的请求签名与您提供的签名不符。”
事实是我已经处理了EC2文档中的所有内容(SignatureVersion 2),但我仍然面临这个错误并且无法解决问题。
以下是详细信息:
1)登录字符串:
s="""GET\n
ec2.amazonaws.com\n
/\n
AWSAccessKeyId=access_id&Action=DescribeSecurityGroups&SignatureMethod=HmacSHA256
&SignatureVersion=2&Timestamp=2013-10-06T14%3A15%3A30&Version=2013-08-15"""
2)生成签名的Python代码:
#!/bin/env python2.7
import hmac
import hashlib
import base64
s="""GET\n
ec2.amazonaws.com\n
/\n
AWSAccessKeyId=acces_id&Action=DescribeSecurityGroups&
SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2013-10-
06T14%3A15%3A30&Version=2013-08-15"""
signature=base64.b64encode(hmac.new("secret_key_id", msg=s,
digestmod=hashlib.sha256).digest())
print(signature)
3)浏览器请求:
由于
答案 0 :(得分:1)
您需要对base-64字符串进行URL编码:
>>> import urllib
>>> urllib.quote('4kvPV1bHGaayNg4u6OfiQh6U5IcI8wiJY+YBZddkI0c=')
'4kvPV1bHGaayNg4u6OfiQh6U5IcI8wiJY%2BYBZddkI0c%3D'