1

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

脸书代码:

- (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);

}

4

1 回答 1

1

不幸的是,实际上并没有任何好的机制来检查客户端和服务器之间的时间偏差。我会坚持简单的检查,因为需要维护和调试的代码更少。而且无论您检查多少,您仍然需要处理取回 TOKEN EXPIRED 错误。

于 2012-07-31T19:21:38.280 回答