【问题标题】:Yahoo OAuth API Rejects my timestamp for Access Token (Python)雅虎 OAuth API 拒绝我的访问令牌时间戳(Python)
【发布时间】:2012-06-05 01:18:06
【问题描述】:

我正在从 Yahoo! 开发联系人导入器!和 GMail 到我们正在做的网络应用程序,使用 Python 和 DJango,我在 Yahoo! 上遇到了以下问题。

我能够请求我的授权令牌和我的 oauth 验证程序,但是,当我将其交换为访问令牌以便我可以对 Yahoo 的 API 进行签名调用时,我得到以下响应:

'oauth_problem=timestamp_refused&oauth_acceptable_timestamps=1338401179-1338402379'

还有,这是我生成的时间戳:

oauth_timestamp=1338401803

如您所见,我的时间戳在您所要求的可接受的时间戳范围内。

这是我编写的生成 api 调用以获取我的访问令牌的函数:

def _yahoo_access_url(request, token, verifier):
    plain_url = settings.YAHOO_GET_ACCESS_URL
    signature = '&'.join((settings.YAHOO_SECRET + '%26', request.session['oauth_data']['oauth_token_secret']))
    nonce_charset = string.ascii_lowercase + string.ascii_uppercase + string.digits
    nonce = ''.join(random.sample(nonce_charset, 6)) 
    parameters = { 
            'oauth_consumer_key': settings.YAHOO_KEY,
            'oauth_signature_method': 'PLAINTEXT',
            'oauth_version': '1.0',
            'oauth_verifier': verifier,
            'oauth_token': token,
            'oauth_timestamp': int(time.time()),
            'oauth_nonce': nonce,
            'oauth_signature': signature,
        }   
    return settings.YAHOO_GET_ACCESS_URL % urllib.urlencode(parameters)

然后,我正在做一些研究来解决我的问题,在 LinkedIn 开发者论坛上,我发现有人和我有同样的问题,他们给他的答案是他的服务器时间错误并且生成了错误的时间戳,我找到了雅虎!网络服务来获取时间戳,所以,我这样修改了我的函数:

def _yahoo_access_url(request, token, verifier):
    plain_url = settings.YAHOO_GET_ACCESS_URL
    signature = '&'.join((settings.YAHOO_SECRET + '%26', request.session['oauth_data']['oauth_token_secret']))
    nonce_charset = string.ascii_lowercase + string.ascii_uppercase + string.digits
    nonce = ''.join(random.sample(nonce_charset, 6)) 
    timestamp = eval(urllib2.urlopen(settings.YAHOO_GET_TIME_URL, 'GET').read())
    parameters = { 
            'oauth_consumer_key': settings.YAHOO_KEY,
            'oauth_signature_method': 'PLAINTEXT',
            'oauth_version': '1.0',
            'oauth_verifier': verifier,
            'oauth_token': token,
            'oauth_timestamp': timestamp['Result']['Timestamp'],
            'oauth_nonce': nonce,
            'oauth_signature': signature,
        }   
    return settings.YAHOO_GET_ACCESS_URL % urllib.urlencode(parameters)

这样,我直接从 Yahoo! 的服务器获取时间戳,但我仍然遇到同样的问题:

回应: 'oauth_problem=timestamp_refused&oauth_acceptable_timestamps=1338401958-1338403158'

时间戳: oauth_timestamp=1338402557

它仍在范围内。

我做错了什么? 我错过了什么吗?任何线索或建议都会非常受欢迎,

提前谢谢你

【问题讨论】:

    标签: python django oauth timestamp yahoo


    【解决方案1】:

    我遇到了这个问题,我修复了它,只在服务器上设置了我的时间戳。 例如:我来自巴西,我的服务器是 EUA,我的时间戳 = -7200 必须减少 2 小时。 所以效果很好,我认为这是一个小错误,因为其他API没有同样的错误。

    【讨论】:

    • 我最终将所有内容导出为 CSV 或 JSON 并对其进行解析。但是,我不再从事那个项目了,我让我在另一家公司的同事尝试了这个,它成功了,非常感谢!。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    相关资源
    最近更新 更多