【问题标题】:Twitter API oAuth failed signature when adding callback url添加回调 url 时 Twitter API oAuth 签名失败
【发布时间】:2012-12-15 05:12:42
【问题描述】:

我正在使用此代码/指南another twitter oAuth cURL access token request that fails 来测试签署我对 API 的请求。我仍在尝试完成this 的第 1 步

注意:密钥只是随机的,它们不是真实的 :)

当我尝试在没有 oauth_callback 的情况下发出请求时,我从 api 得到有效响应

https://api.twitter.com/oauth/request_token?oauth_consumer_key=nHb2kSQ2CD9MW1MdW5VeQ&oauth_nonce=1356902849&oauth_signature=MbvhwGiNPKQR0klUPx9fsmUtdJY%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1356902849&oauth_version=1.0

当我添加 oauth_callback 字符串时(必须让用户使用重定向签名!)我得到“无法验证 oauth 签名和令牌”

https://api.twitter.com/oauth/request_token?oauth_callback=http%3A%2F%2F127.0.0.1%2Ftest%2F&oauth_consumer_key=nHb2kSQ2CD9MW1MdW5VeQ&oauth_nonce=1356902915&oauth_signature=2WTaI9jXNBaDd7f8AqIe6y3%2Beno%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1356902915&oauth_version=1.0

我的意思是这两个 URL 之间没有区别,它们都经过相同的执行,并且它们尊重签名方法。 如何解决?

是的,我在 Twitter 应用设置中添加了 http://127.0.0.1/test/ 作为回调 url。

谢谢

【问题讨论】:

  • 还要检查您的时间是否由 NTP 服务器同步,因为令牌是时间敏感的。

标签: twitter oauth callback


【解决方案1】:

你在推特应用设置中设置回调url了吗?

如果不设置,api可能会失败。

here查看:

还要检查您的时间是否同步(使用 NTP 服务器);见:https://dev.twitter.com/discussions/1043

【讨论】:

  • 是的,我已经设置了回调 url(我写的)并且时间是同步的(否则为什么它会在没有回调的情况下工作?)。无论如何 -anything- 回调中没有“://”的验证...
  • 你确定回调 url 是 URLEncoded 吗?因为这可能是使请求无效的一个很好的理由。是的。我从你的问题中看到,看起来还可以。
  • 那还能是什么?即使在应用设置中设置,我是否必须在请求中发送回调?
  • 我的低血压用完了。 Twitter oAuth API 很难启动。您可以尝试使用您的语言(我猜是 php)找到一个工作示例。恕我直言,这可能是 URL 上的一些编码问题;我已经阅读了很多关于 Twitter 特性的内容。我使用 Twitter4J,我花了一些时间来摆脱 oAuth 的东西,即使有样本和 Java API 可供使用。如果您自己做所有事情,那么痛苦是理所当然的。
  • 我可以看到这是一个 PITA!奇怪的是,在文档中它说 oauth/request_token 需要回调 URL,但我的请求只能在没有它或非 URL 的情况下工作。如果它需要它,它应该会失败!
【解决方案2】:

同意 twitter API 的文档记录不充分 :)

遵循此规则:

  1. 如果您的 oauth_callback 不包含任何查询字符串 = 不需要任何时髦。
  2. 如果您的 oauth_callback 有任何查询字符串参数 = URL Encode 单独查询字符串参数。

希望这能解释清楚。

【讨论】:

    【解决方案3】:

    我解决了这个问题。问题是,即使回调 URL 是使用查询字符串方法或标题正确发送的,正如您在链接上看到的那样,在从基本字符串创建签名时,它也被双重转义。由于文档对此非常糟糕,我认为您不应该像其他 oauth_* 参数(也就是百分比编码“&”)一样双重转义它。

    【讨论】:

    • 所以你是说你必须双重转义?或者你不能?那里的负面因素太多,因此您的解释不清楚。 I didn't think that you shouldn't double escape it ... = 这是否意味着您应该或不应该双重转义?
    • 抱歉:P 您不得对 URL 进行双重转义。
    猜你喜欢
    • 2011-12-09
    • 2011-01-13
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 2013-02-05
    相关资源
    最近更新 更多