Iphone 如何在iOS上将GTMOAuth2与RestKit集成?
我正在尝试获取(版本0.10.2)以使用OAuth2进行身份验证。我用它来处理OAuth交互 我已经成功地让GTMOAuth2让我登录并向我正在使用的api发出请求。 我还设法让RestKit使用我的访问令牌发出请求:Iphone 如何在iOS上将GTMOAuth2与RestKit集成?,iphone,objective-c,ios,oauth-2.0,restkit,Iphone,Objective C,Ios,Oauth 2.0,Restkit,我正在尝试获取(版本0.10.2)以使用OAuth2进行身份验证。我用它来处理OAuth交互 我已经成功地让GTMOAuth2让我登录并向我正在使用的api发出请求。 我还设法让RestKit使用我的访问令牌发出请求: -(void)setRKAuthorizationToken:(NSString*)authorizationToken{ RKObjectManager*objectManager=[RKObjectManager sharedManager]; NSString*authHe
-(void)setRKAuthorizationToken:(NSString*)authorizationToken{
RKObjectManager*objectManager=[RKObjectManager sharedManager];
NSString*authHeader=[NSString stringWithFormat:@“Bearer%@”,authorizationToken];
[objectManager.client setValue:authHeader for HttpHeaderField:@“Authorization”];
}
在这个代码示例中,我手动设置HTTP头,因为RestKit对OAuth2的支持将头设置为Authorization:OAuth2;建议使用第三方库授权请求。我的回答为我指明了从类到子类的方向,它们位于开发
分支中
所以,问题是:您是否成功地将RestKit 0.10.x与GTMOAuth2集成,或者知道如何实现这一点?我将在这里回答我自己的问题,因为我有一些东西可以工作,但并不理想
基本上,我继续手动签署请求,为了处理令牌过期的可能性,我使用GTMOAuth授权一个虚拟请求。严重的缺点是它意味着对api的额外请求。但是,现在我知道我有一个有效的访问令牌。技巧的一部分是知道何时调用loginWithBaseController:
以下是基本概念:
-(void)MakeRequestToEnsuccessTokenSuccess:(void(^)()块错误:(void(^)(NSError*)错误块{
NSURL*url=[NSURL URLWithString:@”https://uri/to/a/basic/api/call.json"];
NSMutableURLRequest*请求=[NSMutableUrlRequestRequestWithURL:url];
//TODO:只有在我们需要的时候才这样做。刷新令牌是一种浪费
//一直如此。
[self.gtmoauth authorizeRequest:RequestCompletionHandler:^(NSError*错误){
如果(错误){
错误块(error);
}否则{
[GTMOAuth2ViewControllerTouch saveParamsToKeychainForName:kKeychainItemName可访问性:空身份验证:self.gtmoauth];
block();
}
}];
}
-(void)loginWithBaseController:(UIViewController*)baseViewController{
[自加载AuthFromKeychain];
if(self.gtmoauth.canAuthorize){
[self makeRequestToEnsureAccessTokenSuccess:^{
NSLog(@“使用%@设置RKAuthorizationToken”,self.gtmoauth.accessToken);
[self-setRKAuthorizationToken:self.gtmoauth.accessToken];
[自我授权完成];
}错误:^(N错误*错误){
[自动注销];
[自显示授权控制器:baseViewController];
}];
}否则{
[自显示授权控制器:baseViewController];
}
}
无论如何,我仍在寻找更好的解决方案。我想我会发布这篇文章,以防它至少通过开发帮助其他人。这篇文章在restkitwiki上引用了一个完整的解决方案
处引用的示例iOS应用程序具有用于授权操作的可插拔架构。它包括一个类,OACSAuthOpRK
,该类提供了一个RestKitRKObjectManager
操作,用于发出授权请求
这里使用的策略是将请求包装在授权中。授权检查OAuth2授权令牌的货币。找到当前令牌后,它会尝试请求并检查返回状态。如果发现令牌已过期,或者从请求中找到401状态返回,它将刷新授权令牌并再次尝试请求