从iOS设备到谷歌应用引擎的Oauth用户身份验证

时间:2012-03-04 21:57:12

标签: ios google-app-engine oauth

我正在开发一个iOS应用程序,需要将数据发送到我正在开发的谷歌应用引擎服务器应用程序。 iOS应用的每个用户都将使用他们的Google身份来访问应用程序的服务器部分。我正在尝试使用漂亮的gtm-oauth library。我已将Google的服务用于register my domain,以获取我的OAuth使用者密钥和OAuth使用者密钥。

当我为用户创建访问Google联系人列表的代码时,它工作正常,但我无法让它与我的应用引擎应用程序一起工作。当我尝试时,我在验证控制器视图中收到错误“您请求的服务尚未可用。请在30秒后重试”。在app引擎控制台中,我看到对/ _ah / OAuthGetAccessToken的请求失败(我没有在该路径上提供任何内容)。

这是我的代码:

-(IBAction)authButtonClicked: (id) sender {
    [GTMHTTPFetcher setLoggingEnabled:YES];
    NSURL *requestURL = [NSURL URLWithString:@"https://mysite.appspot.com/_ah/OAuthGetRequestToken"];
    NSURL *accessURL = [NSURL URLWithString:@"https:/mysite.appspot.com/_ah/OAuthAuthorizeToken"];
    NSURL *authorizeURL = [NSURL URLWithString:@"https://mysite.appspot.com/_ah/OAuthGetAccessToken"];
    NSString *scope = @"http://mysite.appspot.com/";
    GTMOAuthAuthentication *auth = [self myCustomAuth];
    GTMOAuthViewControllerTouch *viewController;
    viewController = [[GTMOAuthViewControllerTouch alloc] initWithScope:scope
                                                            language:nil
                                                     requestTokenURL:requestURL
                                                   authorizeTokenURL:authorizeURL
                                                      accessTokenURL:accessURL
                                                      authentication:auth
                                                              appServiceName:@"My Service"
                                                                delegate:self
                                                        finishedSelector:@selector(viewController:finishedWithAuth:error:)];
    [[self navigationController] pushViewController:viewController animated:YES];
}

- (GTMOAuthAuthentication *)myCustomAuth {
    NSString *myConsumerKey = @"mysite.appspot.com";    // from google registration
    NSString *myConsumerSecret = @"xxxxxxxxxxxxxxx";   //  from google registration
    GTMOAuthAuthentication *auth;
    auth = [[GTMOAuthAuthentication alloc]             initWithSignatureMethod:kGTMOAuthSignatureMethodHMAC_SHA1
                                                        consumerKey:myConsumerKey
                                                         privateKey:myConsumerSecret];
    auth.serviceProvider = @"Custom Auth Service";
    return auth;
}

我使用的是正确的网址吗?范围是否正确?什么会导致这个消息?

1 个答案:

答案 0 :(得分:0)

我在代码中看到了一些错误并且缺少方法调用:
首先,这个网址是错误的:

NSURL *accessURL = [NSURL URLWithString:@"https:/mysite.appspot.com/_ah/OAuthAuthorizeToken"];

应该指向:

NSURL *accessURL = [NSURL URLWithString:@"https://mysite.appspot.com/_ah/OAuthGetAccessToken"];

其次,这个网址也是错误的:

NSURL *authorizeURL = [NSURL URLWithString:@"https://mysite.appspot.com/_ah/OAuthGetAccessToken"];

它应该指向这一个:

NSURL *authorizeURL = [NSURL URLWithString:@"https://mysite.appspot.com/_ah/OAuthAuthorizeToken"];

最后在myCustomAuth方法结束时和返回之前添加以下代码行:

[auth setCallback:@"http://mysite.appspot.com/_my_callback"];

将回调网址指向最后一部分的位置并不重要,因为它不会加载到iOS设备的Safari浏览器中。
希望这能帮到你:)。