如何从iOS客户端验证Google Cloud Endpoint呼叫

时间:2016-03-27 18:11:23

标签: ios swift google-app-engine oauth google-oauth

我的谷歌后端API正在使用Oauth 2.0,当我使用该代码调用我的api之一时:

func userService() -> GTLServiceUserController{
    var service : GTLServiceUserController? = nil
    if service == nil {
        service = GTLServiceUserController()
        service?.retryEnabled = true
    }
    return service!
}

func callApi() {
    let service = userService()
    let query = GTLQueryUserController.queryForGetAllUsers()
    service.executeQuery(query) { (ticket: GTLServiceTicket!, object: AnyObject!, error: NSError!) -> Void in
        if(error != nil){
            print("Error :\(error.localizedDescription)")
            return
        }

        let resp = object as? GTLUserControllerOperationResponse
        if(resp != nil){
            print(resp)
        }
    }
}

我得到了The operation couldn’t be completed. (com.google.appengine.api.oauth.OAuthRequestException: unauthorized)

我已经阅读了此article,但我不希望我的用户登录,而是希望我的应用将其凭据提供给服务进行身份验证而无需用户交互。

我想使用此approach,但他们并不知道如何使用iOS应用程序。

所以基本上我希望能够在没有任何用户交互或登录对话框的情况下成功调用我的API。

请注意我的项目中有这些课程:

  • GTMOAuth2Authentication
  • GTMOAuth2SignIn
  • GTMOAuth2ViewControllerTouch

提前感谢

1 个答案:

答案 0 :(得分:0)

如果您不需要对单个用户进行身份验证(通过OAuth2登录),那么您无需执行任何其他操作,您的应用可以直接调用API(如"呼叫端点中所述) API(未经身份验证)"部分)。

服务帐户用于服务器到服务器的交互,不能用于对单个用户进行身份验证;如果你嵌入了一个服务帐户&在iOS应用程序中,任何人都可以从应用程序中提取它并开始调用您的API,因此它不会增加任何安全性。