无法验证oauth签名和令牌 - 发出javascript

时间:2012-02-23 10:00:57

标签: oauth twitter twitter-oauth

我正在尝试通过以下网址获取访问令牌

https://api.twitter.com/oauth/request_token?
oauth_consumer_key=vRtqh0KONqxr1C2knqv2A&
oauth_nonce=0afa694efd3feee68ebc180f3858a9a3&
oauth_signature=QgHBQ8OLBrjgwivzIfe4p9eBtaQ%3D&
oauth_signature_method=HMAC-SHA1&
oauth_timestamp=1328989636&
oauth_version=1.0

但错误是“无法验证oauth签名和令牌”。这个网址有什么问题?

2 个答案:

答案 0 :(得分:3)

您的系统时间是否正确配置???????

答案 1 :(得分:0)

我们收到此错误“无法验证OAuth签名和令牌”的原因之一是系统时间错误。由于OAuth请求随身携带系统时间戳参数,当设备时间不在Twitter服务器时间的5分钟内时,我们会收到“无法验证OAuth签名和令牌”。

如果这是原因,并且如果系统时间错误,您希望它能够正常工作,那么有两种方法可以使它工作:

  1. 向api.twitter.com上的端点发出HTTP HEAD请求 - 您将在响应中获得一个Date HTTP标头,指示Twitter可以理解的当前时间。然后,您可以将其转换为纪元时间,并根据确定的偏移量调整oauth_timestamp值。

  2. 有一个小型iOS库ios-ntp。用它来获得准确的当前时间。

    之后,在以下方法中设置OAuth对象的时间戳

    - (GTMOAuthAuthentication *)authForTwitter {
    
        GTMOAuthAuthentication *auth = [[GTMOAuthAuthentication alloc] initWithSignatureMethod:kGTMOAuthSignatureMethodHMAC_SHA1
                    consumerKey:TWITTER_CONSUMER_KEY
                    privateKey:TWITTER_CONSUMER_SECRET];
        [auth setServiceProvider:@"Twitter"];     
        NSDate * currentdate = //GET ACCURATE DATE HERE ;            
        [auth setTimestamp:[NSString stringWithFormat:@"%f",[currentdate timeIntervalSince1970]]];
        return auth;
    }
    
  3. 就是这样......快乐的编码:)