【问题标题】:Failed to validate OAuth signature and token twitter integration ios GTM-OAuth无法验证 OAuth 签名和令牌 twitter 集成 ios GTM-OAuth
【发布时间】:2013-09-04 21:40:49
【问题描述】:

我正在使用以下代码来处理我的应用程序中的 twitter 集成。

- (IBAction)signInWithTwitter:(id)sender {    
NSURL *requestURL = [NSURL URLWithString:@"https://api.twitter.com/oauth/request_token"];
NSURL *accessURL = [NSURL URLWithString:@"https://api.twitter.com/oauth/access_token"];
NSURL *authorizeURL = [NSURL URLWithString:@"https://api.twitter.com/oauth/authorize"];
NSString *scope = @"http://api.twitter.com/";

GTMOAuthAuthentication *auth = [self authForTwitter];
[auth setCallback:@"http://www.noop.com/OAuthCallback"];

GTMOAuthViewControllerTouch *viewController;
viewController = [[GTMOAuthViewControllerTouch alloc] initWithScope:scope
                                                             language:nil
                                                      requestTokenURL:requestURL
                                                    authorizeTokenURL:authorizeURL
                                                       accessTokenURL:accessURL
                                                       authentication:auth
                                                       appServiceName:@"CK12: Twitter"
                                                             delegate:self
                                                     finishedSelector:@selector(viewController:finishedWithAuth:error:)];
}

- (GTMOAuthAuthentication *)authForTwitter {

GTMOAuthAuthentication *auth = [[GTMOAuthAuthentication alloc] initWithSignatureMethod:kGTMOAuthSignatureMethodHMAC_SHA1
                                                     consumerKey:TWITTER_CONSUMER_KEY
                                                      privateKey:TWITTER_CONSUMER_SECRET];

[auth setServiceProvider:@"Twitter"];

return auth;
}

我的问题是,如果我要更改设备时间,即延迟 1 小时,那么我会收到以下错误:

Error Domain=com.google.HTTPStatus Code=401 and error message is : failed to validate oauth signature and token .

那么任何人都可以建议如何解决这个问题。如果系统时间是错误的,那么我也想让它工作。

【问题讨论】:

  • 您检查过您的应用程序密钥和应用程序密钥
  • 如果系统时间正确,那么这工作正常。 . .所以应用密钥和应用密钥是正确的。
  • twitter 服务器检查你的请求的时间戳......所以你必须正确发送当前时间,我认为没有其他选择。
  • @IslamAhmed 我们可以获取推特服务器时间并根据推特服务器更改代码以使请求的时间戳正确
  • 不可以,但是你可以在网上搜索一个时间服务的api并联系它来获取格林威治标准时间的当前时间。

标签: ios oauth twitter-oauth


【解决方案1】:

最后我得到了解决方案。 . . .

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

如果设备时间错误,有两种方法可以让它工作。

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

2.有一个名为 ios-ntp 的小型 iOS 库链接:http://code.google.com/p/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;
}

就是这样。 . .快乐编码:)

【讨论】:

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