如何使用Google Identity Toolkit对iOS应用中的用户进行身份验证?

时间:2014-08-30 15:37:22

标签: ios google-app-engine oauth-2.0 google-plus google-oauth

我已按照Google Identity Toolkit文档Google Identity Toolkit - Quick-start App for iOS中提供的示例进行操作。到现在为止,我已经完成了以下工作:

  1. 用户可以按“使用Google登录”并重定向到Google consent screen
  2. 输入正确的Google帐户用户名和密码后,系统会调用openUrl:方法。
  3. 下面的代码说明了openURL:方法的实现:

    - (BOOL)application:(UIApplication *)application
                openURL:(NSURL *)url
      sourceApplication:(NSString *)sourceApplication
             annotation:(id)annotation {
    
      // Handle custom scheme redirect here.
      return [GITClient handleOpenURL:url
                    sourceApplication:sourceApplication
                           annotation:annotation];
    }
    

    我看到url变量包含以下信息:

    com.example.myapp:/oauth2callback?state=67688930&code=4/0JGe2u_FjoGrt_W67iJY2zCWRNgd.Yo023UKVHI4fBvB8fYmgkJyhcwpNkAI
    
    • com.example.myapp - 是我的BundleID
    • oauth2callback - 我不知道它究竟来自哪里。不过我的WidgetURL是:https://myapp.appspot.com/oauth2callback,所以我相信它源于此。
    • statecode似乎每次都是随机生成的。

    然而 [GITClient handleOpenURL:url..始终返回NO,这意味着它无法进行身份验证。发生了什么事?

    我尝试使用类似的示例应用Google Plus - Quick-start sample app for iOS,使用Google Plus API代替Identity Toolkit API。这里一切正常。

    下面是工作示例中openURL:方法的实现:

    - (BOOL)application:(UIApplication *)application
                openURL:(NSURL *)url
      sourceApplication:(NSString *)sourceApplication
             annotation:(id)annotation {
    
      BOOL canHandleUrl = [GPPURLHandler handleURL:url
                                 sourceApplication:sourceApplication
                                        annotation:annotation];
      return canHandleUrl;
    }
    

    此处url变量包含以下信息:

    com.example.myapp:/oauth2callback?state=39225007&code=4/-zN9DyI5QX8Jfcc8ft4SGMNul2AH.MuDLv7lFMdIbPvB8fYmgkJxJ1flMkAI&authuser=0&num_sessions=1&prompt=consent&session_state=41a2c7b449624476165c31cd33e63bac561556a3..ca9c
    

    我注意到存在一些其他信息。但是,如果这有任何重要性,或者只是因为使用了另一个API,我不会这样做。

    总结一下我的问题:如何配置Google Identity Toolkit以与iOS配合使用?

1 个答案:

答案 0 :(得分:0)

iOS客户端存在一些错误。

现在已在iOS客户端中修复了错误,因此如果您遇到同样的问题,请尝试更新。或者阅读我与Google here的讨论,以便更好地了解Gitkit。