我正在尝试使用OAuth2
找到一种方法来使用AFNetworking
(访问和刷新令牌)。我很难找到好文件。
我了解AFOAuth2Client
项目,但这只适用于AFNetworking
1.x
。 AFNetworking
2.0
有什么好的解决方案吗?
此外,令牌究竟会如何刷新?我应该总是检查每个请求的令牌到期吗?这究竟可以在哪里完成?或者可能在令牌过期时使用计时器,然后获取一个新计时器?
答案 0 :(得分:1)
要解决有关令牌刷新的问题,下面是我在上几个项目中使用的代码,以便在每个请求时检查并刷新令牌(如果需要)。
基本上,它只是将请求块传递给一个方法来进行令牌检查,然后在令牌好或刷新令牌后立即运行块。
- (void)refreshAccessTokenWithSuccess:(APIClientSuccess)success failure:(APIClientFailure)failure { if (self.credential == nil) { if (failure) { // Failed to get credentials } return; } if (!self.credential.isExpired) { if (success) { success(nil, nil); } return; } [self authenticateUsingOAuthWithURLString:kOAuthURL refreshToken:self.credential.refreshToken success:^(AFOAuthCredential *newCredential) { // SUCCESS! self.credential = newCredential; if (success) { success(nil, nil); } } failure:^(NSError *error) { // Failed to get credentials 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) { // Failed request if (failure) { failure((AFHTTPRequestOperation *)operation, error); } }]; }; [self refreshAccessTokenWithSuccess:nestedSuccess failure:failure]; }
如果您想查看整个APIClient课程,请告诉我。
答案 1 :(得分:0)
这可能不是您所寻求的,但这就是我公司处理它的方式。我们为项目使用API,因此我们将GMail OAuth信息移交给我们的API,然后它返回API的令牌。我们让API处理令牌/过期令牌。
根据您的应用程序,这可以很好地工作。我们首先尝试了您的方法,但我们在设备上处理的内容太多了,因此我们将其集成到了API中。我在设备上所要做的就是添加一个X-Authorization标头,我们的API标记永远不会改变。
可能不是你想要的答案,至少是你穿着的人的替代路线。
答案 2 :(得分:0)
AFOAuth2Client
的分支支持AFNetworking 2.0
。看看这个讨论:
https://github.com/AFNetworking/AFOAuth2Client/pull/55#commits-pushed-5ed7a6e
这些修补程序允许库与AFNetworking 2.0
一起使用。甚至还有关于在使用CocoaPods时如何引用它的说明。
答案 3 :(得分:0)
我为AFNetworking 2.0分配了一个非常棒的AFOAuth2Client重写(由Gabriel Rinaldi编写)并进行了一些更改以满足我的需求(公开responseObject并接受无效的SSL证书)。目前正在等待拉取请求(因为他们并不常见,所以我不希望它们被接受)。您可以通过GitHub
获取我的版本或Cocoapods
pod 'GROAuth2Client', :git => 'https://github.com/nicktmro/GROAuth2SessionManager'
或者您可以访问Gabriel的原始回购并将其添加为广告pod "GROAuth2SessionManager" , "~> 0.2"
。
我意识到这并没有回答关于刷新令牌的问题的第二部分。我在我的项目中并没有那么远,所以我无法肯定地告诉你,但我想你可以很快发现它是否会更新。