oauth1,rsa-sha1,header params

时间:2014-05-22 11:12:30

标签: python oauth

我一直在使用request-oauthlib,它有rsa-sha1签名算法,但似乎无法在授权标头中添加额外的参数,如果我在以前手动修改标头提出要求 "请求包含不完整或无效的oauth_signature。" 因为当我将新的oauth_body_hash添加到授权标头时,它已经创建了oauth_signature。 我已粘贴代码,使用oauth的第一个调用正确传递,但第二个调用是错误的。

任何可行的方法来解决这个问题?另一个库有两个选项来添加额外的参数并提供rsa-sha1签名?

oauth = OAuth1(
    consumer_key,
    signature_method='RSA-SHA1',
    signature_type='auth_header',
    rsa_key=key,
    callback_uri=callback_uri
)
oauth.client.realm = 'eWallet'
r = requests.post(url=request_token_url, auth=oauth)
credentials = parse_qs(r.content)
# end of request

# post shopingcart
root = ET.fromstring(shopping_cart_xml)
root.find('OAuthToken').text = credentials['oauth_token'][0]
xml = ET.tostring(root, encoding="us-ascii", method="xml")

sha1 = hashlib.sha1()
sha1.update(xml)
oauth_body_hash = sha1.digest()
oauth_body_hash = base64.b64encode(oauth_body_hash)
oauth.client.oauth_body_hash = oauth_body_hash

req = Request('POST', shopping_cart_url, data=xml, auth=oauth)
prepped = req.prepare()
auth_header = prepped.headers['Authorization'] + ', oauth_body_hash="%s"' %       (oauth_body_hash)

headers = {'Content-Type': 'application/xml', 'Authorization': auth_header}
r = requests.post(url=shopping_cart_url, headers=headers, data=xml)

0 个答案:

没有答案