OAuth刷新令牌错误

时间:2012-07-31 17:27:24

标签: iphone objective-c cocoa-touch ipad oauth-2.0

我正在使用OAuth 2.0登录网站。所以每当我尝试登录服务器时,我得到一个响应,指的是过期日期,访问令牌和刷新令牌。问题是令牌在我从服务器获得的给定时间之前已过期。所以我发现服务器的时间和iPhone的时间之间存在间隔。当我查看SDK facebook的代码时,没有逻辑来处理这个问题,这是一个简单的比较。所以我的问题是来自服务器端的这个问题我的意思是OAuth的实现是不正确的,或者是客户端的问题?

Facebook代码:

- (BOOL)isSessionValid {
    return (self.accessToken != nil && self.expirationDate != nil
        && NSOrderedDescending == [self.expirationDate compare:[NSDate date]]);

}

我的代码:

// Get the remaining period of the token to expire and subtract 30 sec
int delay = ([expirationDate timeIntervalSinceDate:serverDateTaken] - 30);

// Save the new Expiring date 
objectOAuth.expiresIn = [[[NSDate date] dateByAddingTimeInterval:delay] description];

+ (BOOL)isSessionValid
{   
    // Get expiration date
    OAuth *authParam = [Connection getSessionParameters];

    // Formating
    static NSString *timeZone = @"UTC";
    NSDate *expirationDate = [Connection getDateFromString:authParam.expiresIn withTimeZone:timeZone];


    // get the remaining period
    int diff = [expirationDate timeIntervalSinceNow];

   // Check if it's expired
   return (diff <= 0);

}

1 个答案:

答案 0 :(得分:1)

不幸的是,没有任何好的机制来检查客户端和服务器之间的时间偏差。我会坚持使用简单的检查,因为需要维护和调试的代码较少。无论你检查多少,你仍然需要处理一个TOKEN EXPIRED错误。