【问题标题】:Why is Twitter returning a "Failed to validate oauth signature and token?"为什么 Twitter 返回“无法验证 oauth 签名和令牌”?
【发布时间】:2011-02-26 15:49:12
【问题描述】:

很抱歉又另一个“无法验证 oauth 签名和令牌”错误给您带来困扰,但我就是不知道我的请求出了什么问题。

我正在从这个字符串构造我的签名:

POST&http%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_callback%3Dhttp%3A%2F%2Fcraiga.id.au%2Ftwitter%2Fconnected%26oauth_consumer_key%3Dtm5...DOg%26oauth_nonce%3D8...22b%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1275453048%26oauth_version%3D1.0

由此我使用以下 PHP 代码生成 28 个字符的签名:

base64_encode(hash_hmac('sha1', $raw, 'YUo...HIU' . '&', true));

使用此签名,我发送以下请求:

POST http://api.twitter.com/oauth/request_token HTTP/1.1
Host: api.twitter.com
Pragma: no-cache
Accept: */*
Proxy-Connection: Keep-Alive
Authorization: OAuth oauth_nonce="3D8...22b", oauth_callback="http%3A%2F%2Fcraiga.id.au%2Ftwitter%2Fconnected", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1275453048", oauth_consumer_key="tm5...DOg", oauth_signature="aYd...c6E%3D", oauth_version="1.0"
Content-Length: 266
Content-Type: application/x-www-form-urlencoded

oauth_callback=http%3A%2F%2Fcraiga.id.au%2Ftwitter%2Fconnected&oauth_consumer_key=tm5...DOg&oauth_nonce=3D8...22b&oauth_signature_method=HMAC-SHA1&oauth_timestamp= 1275453048&oauth_version=1.0

我收到 Twitter 对此请求的以下回复:

HTTP/1.1 401 Unauthorized
Date: Wed, 02 Jun 2010 04:40:14 GMT
Server: hi
Status: 401 Unauthorized
X-Transaction: 1275453614-48409-7443
Last-Modified: Wed, 02 Jun 2010 04:40:14 GMT
X-Runtime: 0.01083
Content-Type: text/html; charset=utf-8
Content-Length: 44
Pragma: no-cache
X-Revision: DEV
Expires: Tue, 31 Mar 1981 05:00:00 GMT
Cache-Control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0
Set-Cookie: k=58.161.42.101.1275453614748615; path=/; expires=Wed, 09-Jun-10 04:40:14 GMT; domain=.twitter.com
Set-Cookie: guest_id=12754536147577949; path=/; expires=Fri, 02 Jul 2010 04:40:14 GMT
Set-Cookie: _twitter_sess=BAh7CToPY3JlYXRlZF9hdGwrCKaq9fYoAToRdHJhbnNfcHJvbXB0MDoHaWQi%250AJWU0ZDFhMGQzMWU0NTZjMzJiZWFkNWUzMTA4ZDRjOTg3IgpmbGFzaElDOidB%250AY3Rpb25Db250cm9sbGVyOjpGbGFzaDo6Rmxhc2hIYXNoewAGOgpAdXNlZHsA--f1e5c7649858a1694f24307504354846bbc1d16b; domain=.twitter.com; path=/
Vary: Accept-Encoding
Connection: close

Failed to validate oauth signature and token

如果有人能解释为什么这可能会失败,我很想听听。

【问题讨论】:

标签: php twitter oauth


【解决方案1】:

您使用错误的信息来生成签名。 你应该使用 ...

oauth_callback=http%3A%2F%2Fcraiga.id.au%2Ftwitter%2Fconnected&oauth_consumer_key=tm5...DOg&oauth_nonce=3D8...22b&oauth_signature_method=HMAC-SHA1&oauth_timestamp= 1275453048&oauth_version=1.0

...生成签名(阅读:不使用'POST'和请求URI)

更多信息...见Twitter Developers: Creating a signature

【讨论】:

    【解决方案2】:

    问题存在的原因是你的服务器时间与推特时间不同步 服务器运行 100% 解决方案(用于同步时钟)

    sudo ntpdate -s time.nist.gov
    

    并使用

    查看推特时间
    lynx --dump --head https://api.twitter.com/1/help/test.json
    

    【讨论】:

      【解决方案3】:

      我最近在尝试从 Spout(Storm) 连接到 Twitter 时遇到了类似的问题;必须使用以下方法同步我的 Ubuntu 时钟:

      sudo apt-get install ntp

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-24
        • 1970-01-01
        • 2011-04-08
        • 2014-04-02
        相关资源
        最近更新 更多