使用本地开发服务器的iOS Google Cloud Endpoint Authenticated API调用

时间:2013-07-28 14:04:10

标签: ios google-app-engine google-oauth google-cloud-endpoints

我实施了一个云端点,其中一些调用需要Google用户身份验证,我现在想要使用iOS应用程序测试这些调用。到目前为止,我已经按照文档中的所有步骤进行操作,但是,当我尝试随后对本地开发服务器进行API调用时,我设法让用户OAUTH登录从应用程序工作(localhost:8888) ),我收到以下错误:

无法使用方案http

授权请求

根据我的阅读,auth不适用于http方案,需要https。所以我的问题是:是否可以将https与本地开发服务器一起使用?或者,是否还有其他我错过的内容可以让我在本地环境中测试用户身份验证?

非常感谢任何帮助。 欢呼声。

1 个答案:

答案 0 :(得分:3)

感谢您的帮助@bossylobster。我一直在本地开发服务器上使用http,但是,真正的问题是iOS OAuth2库不会授权非https请求,这意味着我无法在本地测试经过身份验证的调用。

我最终在iOS OAuth2库的GTMOAuth2Authentication类中找到了一个标志,允许库授权所有请求(包括非https):

// Property indicating if this object will authorize plain http request
// (as well as any non-https requests.) Default is NO, only requests with the
// scheme https are authorized, since security may be compromised if tokens
// are sent over the wire using an unencrypted protocol like http.
@property (assign) BOOL shouldAuthorizeAllRequests;

默认情况下,此标志设置为false / NO。要更新此标志以处理我的请求,我在发出API请求之前在OAUTH回调方法中更改了它的值:

- (void)viewController:(GTMOAuth2ViewControllerTouch *)viewController
      finishedWithAuth:(GTMOAuth2Authentication *)auth
                 error:(NSError *)error {
    [self dismissViewControllerAnimated:YES completion:nil];

    if (error != nil) {
        // Authentication failed
        ...
    } else {
        // Authentication succeeded
        ...

        // TODO: for development purposes only to use non-https....remove for release.
        auth.shouldAuthorizeAllRequests = YES;

        // Make some API calls
        ...
    }
}

完成此更改后,iOS库会向本地开发服务器授权非https请求。请务必注意,此标志仅用于开发目的。