2016-03-27 110 views
1

我的谷歌后端的API使用Oauth 2.0,当我打电话给我的API与代码的一个认证的谷歌云终点呼叫:如何从iOS客户端

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

如果您不需要验证个人用户(通过OAuth2登录),那么你不会需要做其他任何事情,您的应用程序可以直接调用API(如“调用Endpoint API(未经身份验证)”部分所述)。

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

+0

感谢您的回答,您能告诉我如何将我的服务帐户和密钥嵌入我的应用程序吗? –

+0

如何使用Google的默认凭据?是否有Android版本的GoogleAuthUtil库的iOS版本? –