【问题标题】:Failed to validate oauth signature and token - Issue javascript无法验证 oauth 签名和令牌 - 发出 javascript
【发布时间】:2013-09-05 01:25:11
【问题描述】:
我正在尝试通过以下网址获取访问令牌
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 签名和令牌”。这个网址有什么问题??
【问题讨论】:
标签:
oauth
twitter
twitter-oauth
【解决方案2】:
我们收到此错误“无法验证 OAuth 签名和令牌”的原因之一是系统时间错误。由于 OAuth 请求带有系统时间戳参数,当设备时间不在 Twitter 服务器时间的 5 分钟内时,我们会得到“Failed to validate OAuth signature and token”。
如果是这个原因,而且你想让它在系统时间错误的情况下也能正常工作,那么有两种方法可以让它工作:
向 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;
}
就是这样......快乐的编码:)