首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OAuth签名无效错误使用Rauth,

OAuth签名无效错误使用Rauth,
EN

Stack Overflow用户
提问于 2013-09-27 07:42:15
回答 1查看 1K关注 0票数 1

对不起,如果这是一个noob问题,但是我试图用Vimeo测试并开始使用RAuth python库。

我正在使用应用程序页面上提供的访问令牌/秘密,用于我在开发者网站上注册的应用程序Vimeo。因此,我想问题的第一部分是:这是一个有效的访问令牌/秘密,还是我确实需要通过OAuth过程,尽管我试图使用这个API访问我公司的帐户?

假设这是一个有效的令牌,那么问题的实质是,考虑到这个实现:

代码语言:javascript
复制
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')

我得到以下答复:

代码语言:javascript
复制
{"response": {"err": {"expl": "The oauth_signature passed was not valid.", "code": "401", "msg": "Invalid signature"}, "stat": "fail", "generated_in": "0.0041"}

基于类似于此的OAuth头(注意,我只是从会话对象中提取了这些标题,所以键不是内部使用的,而是通过Rauth库定义的):

代码语言:javascript
复制
{
"signature": "DH9ueZmrnguFgBIDZs7ZQPE7qHs=", 
"nonce": "8bcbc130548c0677cd134e7d7f22b17df7a2eee6", 
"timestamp": 1380266167, 
"oauth_version": "1.0", 
"token": VIMEO_ACCESSTOKENSECRET, 
"consumer_key": VIMEO_CLIENTID, 
"sig_method": "HMAC-SHA1"
}

我读过一些关于时钟被关的帖子。我的dev工作站正在检查time.windows.com,不过我确实用time-a.nist.gov切换了它,以防万一。我还关闭了同步,并手动改变了我的时钟几秒钟。所有这些都没有效果。我还试着对照我的时钟检查developer.vimeo.com站点的操场示例中的时间戳,它们最多在1-2秒之内。

我觉得我在做一些不明智的事情,尽管假设第一个问题的答案是正确的,并且根据我在RAuth代码中所读到的内容,如果我有一个有效的令牌和秘密,我应该能够使用这些令牌和秘密,而不必经过整个OAuth过程,因为这将生成一个新的令牌/秘密。

再说一遍,我是OAuth新手,对Python相对陌生,所以我可能在做一些蠢事。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-28 15:03:45

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

代码语言:javascript
复制
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凭据,它似乎像预期的那样起作用了):

代码语言:javascript
复制
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'})

希望这能帮上忙!

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

https://stackoverflow.com/questions/19045362

复制
相关文章

相似问题

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