我正在尝试通过以下网址获取访问令牌
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签名和令牌”。这个网址有什么问题?
答案 0 :(得分:3)
您的系统时间是否正确配置???????
答案 1 :(得分:0)
我们收到此错误“无法验证OAuth签名和令牌”的原因之一是系统时间错误。由于OAuth请求随身携带系统时间戳参数,当设备时间不在Twitter服务器时间的5分钟内时,我们会收到“无法验证OAuth签名和令牌”。
如果这是原因,并且如果系统时间错误,您希望它能够正常工作,那么有两种方法可以使它工作:
向api.twitter.com上的端点发出HTTP HEAD请求 - 您将在响应中获得一个Date HTTP标头,指示Twitter可以理解的当前时间。然后,您可以将其转换为纪元时间,并根据确定的偏移量调整oauth_timestamp
值。
有一个小型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;
}
就是这样......快乐的编码:)