我正在尝试找到一种使用OAuth2
(访问和刷新令牌)与AFNetworking
结合使用的方法。在这方面,我很难找到好的文档。
我知道有AFOAuth2Client
项目,但它只适用于AFNetworking
1.x
版本。是否有适用于AFNetworking
2.0
的好解决方案?
此外,令牌将如何被刷新?我必须始终检查每个请求的令牌到期时间吗?在哪里可以进行检查?或者使用计时器来定期获取新的令牌?
我正在尝试找到一种使用OAuth2
(访问和刷新令牌)与AFNetworking
结合使用的方法。在这方面,我很难找到好的文档。
我知道有AFOAuth2Client
项目,但它只适用于AFNetworking
1.x
版本。是否有适用于AFNetworking
2.0
的好解决方案?
此外,令牌将如何被刷新?我必须始终检查每个请求的令牌到期时间吗?在哪里可以进行检查?或者使用计时器来定期获取新的令牌?
- (void)refreshAccessTokenWithSuccess:(APIClientSuccess)success failure:(APIClientFailure)failure { if (self.credential == nil) { if (failure) { // 无法获取凭证 } return; } if (!self.credential.isExpired) { if (success) { success(nil, nil); } return; } [self authenticateUsingOAuthWithURLString:kOAuthURL refreshToken:self.credential.refreshToken success:^(AFOAuthCredential *newCredential) { // 成功! self.credential = newCredential; if (success) { success(nil, nil); } } failure:^(NSError *error) { // 无法获取凭证 if (failure) { failure(nil, error); } }]; } - (void)RefreshGET:(NSString *)URLString parameters:(NSDictionary *)parameters success:(APIClientSuccess)success failure:(APIClientFailure)failure { APIClientSuccess nestedSuccess = ^(AFHTTPRequestOperation *operation, id responseObject) { AFHTTPRequestOperation *thisRequestOperation = [super GET:URLString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { if (success) { success((AFHTTPRequestOperation *)operation, responseObject); } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { // 请求失败 if (failure) { failure((AFHTTPRequestOperation *)operation, error); } }]; }; [self refreshAccessTokenWithSuccess:nestedSuccess failure:failure]; }
如果您想查看整个APIClient类,请告诉我。
这可能不是你想要的,但这是我的公司处理它的方式。我们为我们的项目使用API,因此我们将GMail OAuth信息交给我们的API,然后它返回给我们一个API令牌。我们让API处理令牌/过期令牌。
根据您的应用程序,这可能非常有效。我们起初尝试了您的方法,在设备上处理起来太麻烦了,因此我们将其集成到了我们的API中。我在设备上所要做的就是添加一个X-Authorization头,其中包含我们的API令牌,该令牌永远不会更改。
也许不是你想要的答案,但至少是一个替代路线,来自一个曾经身处你鞋子的人。
有一个支持 AFNetworking 2.0
的 AFOAuth2Client
分支。请查看这个讨论:
https://github.com/AFNetworking/AFOAuth2Client/pull/55#commits-pushed-5ed7a6e
这些修复使得该库能够与AFNetworking 2.0
一起使用。甚至还有关于在使用CocoaPods时如何引用它的说明。
我fork了一个非常棒的AFOAuth2Client重写版(由Gabriel Rinaldi编写)适用于AFNetworking 2.0,并进行了一些更改以满足我的需求(公开responseObject并接受无效的SSL证书)。目前正在等待pull request(虽然它们不是那么常见,所以我不指望它们会被接受)。您可以通过GitHub获取我的版本
或者使用Cocoapods
pod 'GROAuth2Client', :git => 'https://github.com/nicktmro/GROAuth2SessionManager'
或者您可以直接转到Gabriel的原始存储库并将其添加为pod pod "GROAuth2SessionManager" , "~> 0.2"
.
我意识到这并没有回答您关于令牌刷新的第二个问题。我在项目中还没有走得那么远,所以我不能确定它是否会刷新,但我想您很快就能找出来。