2013-09-27 59 views
1

对不起,如果这是一个noob问题,但我试图测试并开始与Vimeo的API一起使用RAuth python库。OAuth签名无效错误使用Rauth,Python对Vimeo API

我在开发者网站上向Vimeo注册的应用程序的应用程序页面上使用了访问令牌/密码。所以我猜这个问题的第一部分是:是否有效的访问令牌/秘密,还是需要实际经历OAuth流程,尽管我尝试使用此API访问我公司的帐户?

假设这是一个有效的令牌,那么问题的肉,因为此实现:

from rauth.session import OAuth1Session 

session = OAuth1Session(
        consumer_key=VIMEO_CLIENTID, 
        consumer_secret=VIMEO_CLIENTSECRET, 
        access_token=VIMEO_ACCESSTOKEN, 
        access_token_secret=VIMEO_ACCESSTOKENSECRET) 

response = session.get(VIMEO_URL_BASE + 'vimeo.oauth.checkAccessToken') 

我得到的回应如下:基于OAuth的头

{"response": {"err": {"expl": "The oauth_signature passed was not valid.", "code": "401", "msg": "Invalid signature"}, "stat": "fail", "generated_in": "0.0041"} 

看起来像这样(注意,我刚刚从会话对象中提取了这些内容,因此这些键不是内部使用的,并且是由Rauth库定义的那些键):

{ 
"signature": "DH9ueZmrnguFgBIDZs7ZQPE7qHs=", 
"nonce": "8bcbc130548c0677cd134e7d7f22b17df7a2eee6", 
"timestamp": 1380266167, 
"oauth_version": "1.0", 
"token": VIMEO_ACCESSTOKENSECRET, 
"consumer_key": VIMEO_CLIENTID, 
"sig_method": "HMAC-SHA1" 
} 

我读过一些关于时钟关闭的文章。我的开发工作站检查time.windows.com,尽管我确实用time-a.nist.gov将其切换出来以防万一。我也关闭了同步并手动移动了我的时钟几秒钟。没有一个效果。我也尝试过检查developer.vimeo.com网站的操场示例中的时间戳与我的时钟,他们最多只能在1-2秒之内。

我想我在做一些没有意义的事情,尽管假设第一个问题的答案是正确的,并且根据我在RAuth代码中读到的内容,如果我拥有有效的身份验证令牌和密码,我应该可以使用那些无需经历整个OAuth流程,因为无论如何这只会产生新的令牌/秘密。

再一次,我是OAuth的新手,我对Python比较陌生,所以我可能会做一些愚蠢的事情。

回答

2

这里的问题是,您正在尝试获取整个URL,并且不允许Rauth通过请求API来签署参数。这不起作用,因为Rauth需要能够查看参数并以特定方式进行签名。相反,你应该这样做:

print sess.get('http://vimeo.com/api/rest/v2', params={'method': 'vimeo.oauth.checkAccessToken'}).content 

<?xml version="1.0" encoding="UTF-8"?>\n<rsp generated_in="0.0044" stat="ok">\n <oauth>\n <token>...</token>\n <permission>delete</permission>\n <user display_name="Max Countryman" id="16760357" username="user16760357"/>\n </oauth>\n</rsp>\n' 

记住Rauth是请求,但是添加的方便OAuth的处理。这意味着你应该像使用请求一样使用Rauth。

下应该工作(我个人和我的Vimeo凭据测试,它似乎工作如预期):

from rauth.session import OAuth1Session 

session = OAuth1Session(consumer_key=VIMEO_CLIENTID, 
         consumer_secret=VIMEO_CLIENTSECRET, 
         access_token=VIMEO_ACCESSTOKEN, 
         access_token_secret=VIMEO_ACCESSTOKENSECRET) 

response = session.get('http://vimeo.com/api/rest/v2', params={'method': 'vimeo.oauth.checkAccessToken'}) 

希望帮助!

+1

我明白了。我没有意识到这一点。我会去看看它是否能修正它。你的库比requested_oauthlib精简得多。我在Google App Engine上运行,因此我可以在那里加载的越少越好。 :) – KenLFG

+0

因此,显然,这可以与OAuth 1 API协同工作,只要您按照上述maxcountryman的说法操作即可。这是什么东西,只是没有记录或我有点想念它? – KenLFG