首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OAuth身份验证,签名无效

OAuth身份验证,签名无效
EN

Stack Overflow用户
提问于 2012-03-21 06:21:57
回答 2查看 2.3K关注 0票数 0

我试着将request-oauth库(基于python-request)移植到Python3(在2to3的帮助下),但我在使用StatusNet (与Twitter相同的API )验证签名时遇到了问题。

当我向oauth/request_token发出请求时,我没有任何问题,但是对于oauth/access_token,我有一个错误的401 Invalid signature。我不明白为什么,因为在我看来我签的是正确的。

例如,使用Python2代码,cf hook.pyauth.py (来自git代码库),我得到:

代码语言:javascript
复制
signing_key = '0de1456373dfc9349dd38a48e61fc844&136d6b9a597ee57d4338254812681acd',
signing_raw = 'POST&http%3A%2F%2Fstatus2.dotzero.me%2Fapi%2Foauth%2Faccess_token&oauth_consumer_key%3Dec3ad931b294b51a5ff595c732acb7a5%26oauth_nonce%3D33448267%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1332279747%26oauth_token%3D2131043f3516bcb730d391ed2033a880%26oauth_verifier%3D8816492%26oauth_version%3D1.0'
oauth_hook.token.key = '2131043f3516bcb730d391ed2033a880'
oauth_hook.token.secret = '136d6b9a597ee57d4338254812681acd'
request.data_and_params = {'oauth_version': '1.0', 'oauth_signature': 'xyjxH5QcfZXnG111L7qANZ+ahRI=',
    'oauth_token': '2131043f3516bcb730d391ed2033a880', 'oauth_nonce': '33448267', 
    'oauth_timestamp': '1332279747', 'oauth_verifier': '8816492', 
    'oauth_consumer_key': 'ec3ad931b294b51a5ff595c732acb7a5', 
    'oauth_signature_method': 'HMAC-SHA1'}

使用我的Python3端口,cf hook.pyauth.py,我得到:

代码语言:javascript
复制
signing_key = '0de1456373dfc9349dd38a48e61fc844&136d6b9a597ee57d4338254812681acd',
signing_raw = 'POST&http%3A%2F%2Fstatus2.dotzero.me%2Fapi%2Foauth%2Faccess_token&oauth_consumer_key%3Dec3ad931b294b51a5ff595c732acb7a5%26oauth_nonce%3D52360702%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1332278837%26oauth_token%3D2131043f3516bcb730d391ed2033a880%26oauth_verifier%3D8816492%26oauth_verifier%3D8816492%26oauth_version%3D1.0'
oauth_hook.token.key = '2131043f3516bcb730d391ed2033a880'
oauth_hook.token.secret = '136d6b9a597ee57d4338254812681acd'
request.data_and_params = {'oauth_nonce': '52360702', 'oauth_timestamp': '1332278837', 
    'oauth_verifier': '8816492', 'oauth_consumer_key': 'ec3ad931b294b51a5ff595c732acb7a5', 
    'oauth_signature_method': 'HMAC-SHA1', 'oauth_version': '1.0', 
    'oauth_token': '2131043f3516bcb730d391ed2033a880',
    'oauth_signature': 'BRsb11dk++405uaq5pRS+CMUzbo='}

这两个看起来都不错,但是第一个成功了,第二个返回了401错误,签名无效。

在这两种情况下,我都会得到token.keytoken.secret作为以下结果:

代码语言:javascript
复制
OAuthHook.consumer_key = self.ckey
OAuthHook.consumer_secret = self.csecret
oauth_hook = OAuthHook()
client = requests.session(hooks={'pre_request': oauth_hook})
response = client.post('%soauth/request_token' % (self.url), {'oauth_callback': 'oob'})
# new oauth_hook with the request token
oauth_hook = OAuthHook(response[b'oauth_token'][0],response[b'oauth_token_secret'][0])

他们,我去oauth/authorize?oauth_token=%s" % oauth_hook.token.key获得授权的应用程序,并得到一个密码。在此之后,我可以执行有问题的请求

代码语言:javascript
复制
...
response = client.post('%soauth/request_token' % (self.url), {'oauth_callback': 'oob'})
oauth_hook = OAuthHook(response[b'oauth_token'][0],response[b'oauth_token_secret'][0])
# get the pincode from %soauth/authorize?oauth_token=%s" % (self.url, oauth_hook.token.key)
oauth_hook.token.set_verifier(pincode)
client = requests.session(hooks={'pre_request': oauth_hook})
response = client.post("%soauth/access_token" % (self.url),
                 {'oauth_verifier': pincode})

auth.py文件中的签名代码为

代码语言:javascript
复制
def sign(self, request, consumer, token):
    """Builds the base signature string."""
    key, raw = self.signing_base(request, consumer, token)
    hashed = hmac.new(key.encode(), raw.encode(), sha1)
    # Calculate the digest base 64.
    return binascii.b2a_base64(hashed.digest())[:-1]

你知道为什么它不能和py3k代码一起工作吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-21 17:59:51

找到答案了!POST请求中有两个oauth_verifier,导致签名错误...

票数 0
EN

Stack Overflow用户

发布于 2015-10-09 20:02:16

您可能需要验证请求中的Authorization标头字符串。通常情况下,它的格式为:

在上面的标头值中,检查"oauth_signature“是否正确解码。也就是说,它不应包含如下值:%3D。您可以使用对字符串进行解码。

这对我很有效。希望这能帮助到别人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9795907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档