腾讯微博的OAuth问题......

2011-07-27 13:43:54 +08:00
 fanzeyi
一直是 「Invalid signature」 错误.. 【用的 oauth 库 http://oauth.googlecode.com/svn/code/python/oauth/oauth.py

然后我就逐行的检查 HMAC 加密的代码.. 发现没有一点问题..

在 腾讯微博开放平台的论坛上也看到有好多人出现这个问题 似乎是和 urlencode 有关 但是具体的也没人给出个正确的解法...

在 Github 上有个 andelf/pyqqweibo 的 repo 我直接给他的 oauth.py 改过来用了 但是还是一样不行..

下面的是 Signature Base String..

GET&https%3A%2F%2Fopen.t.qq.com%2Fcgi-bin%2Frequest_token&oauth_callback%3Dnull%26oauth_consumer_key%3D11dca692584b4cc2835151b3c925ed1d%26oauth_nonce%3D93468450%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1311745309%26oauth_version%3D1.0

密匙部分我记得带 & 号了... 有搞过 腾讯OAuth的嘛 求教!
12336 次点击
所在节点   OAuth
29 条回复
joyqi
2011-08-02 10:50:57 +08:00
@fanzeyi php也有了解决办法,经过哥的多方猜测,是nonce的编码问题,如果有特殊字符腾讯那边是要求编码,但php没有编码,所以你得自己手动setNonce
waitd
2011-11-28 00:25:34 +08:00
md,我用的是js的OAuth,结果非要把整个请求encodeURIComponent一下,才不会提示invalid signature,但返回的status=0,继续杯具中..狗日的腾讯
fanzeyi
2011-11-28 00:52:28 +08:00
@waitd 淡定 做OAuth的时候最需要耐心..
fanzeyi
2011-11-28 00:52:37 +08:00
@waitd 对了还有细心
laiwei
2012-02-23 10:42:01 +08:00
@fanzeyi 腾讯太变态了,我用httplib2,一直提示invalid signature,换成urllib,确实好了,我擦
laiwei
2012-02-23 11:10:57 +08:00
@fanzeyi @joyqi

我发现腾讯微博oauth签名的真正问题了
并不是urllib或者httplib的问题

而是计算basestring的计算方法有问题:

比如待签名的东西参数有:
d = {
oauth_callback : xxxx.com/sth
oauth_consumer_key : 123456
oauth_nonce : 33333
oauth_signature_method : HMAC-SHA1
oauth_timestamp : 1234455667777
oauth_version : 1.0

}

首先把d按照key做一下sort
d = sorted(d.items(), key=lambda x:x[0])

其次,把参数和参数的值都做urlencode
dd = [urllib.urlencode([x]) for x in d]

然后,把dd用&符号连接起来,再做一次urlencode(也就是quote)
part3 = urllib.quote("&".join(dd))


这里的关键就是说,这些参数前前后后,被quote了两次!

这样做,就ok了
fanzeyi
2012-02-23 12:42:49 +08:00
@laiwei 谢谢原理解释!
foxling
2012-02-25 13:49:00 +08:00
确认不要有多余的参数,腾讯的request token, 如果有不是他提供的参数列表里的参数时,会出这个问题,同样的oauth库在新浪没有任何问题。
bollwang
2013-12-26 21:11:07 +08:00
这个是怎么解决的呢?代码能共享一份麽?qq56770498,万分感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/16211

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX