ios - 如何验证来自 iOS 客户端的 Google Cloud Endpoint 调用

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

我的 google 后端 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)
        }
    }
}

我收到 操作无法完成。 (com.google.appengine.api.oauth.OAuthRequestException:未经授权)

我已经读过这个 article ,但我不希望我的用户登录,而是我希望我的应用程序在没有用户交互的情况下向服务提供其凭据以进行身份​​验证。

我想用这个approach ,但他们没有说明如何使用 iOS 应用程序。

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

请注意,我的项目中有这些类(class):

  • GTMOAuth2Authentication
  • GTMOAuth2SignIn
  • GTMOAuth2ViewControllerTouch

提前致谢

最佳答案

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

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

关于ios - 如何验证来自 iOS 客户端的 Google Cloud Endpoint 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36250815/

相关文章:

python - AppEngine 中的 GQL 查询

ios - iOS 中基于 map 的游戏的最佳 2D/3D 游戏引擎

ios - iOS:未呈现NSMutableAttributedString.AddAttributes。 (Xamarin)

ios - 辞职 iOS 应用程序 "Product identifiers don' t 匹配”

javascript - Swift - 动画矩形

objective-c - 如何在 Swift 类中从 Objective C 调用单例类方法?

objective-c - 在 Swift 中带有变量的 system() 命令

python - 如何将 Google App Engine 与 MS-SQL 一起使用

java - 高效使用 GAE DataStore

ios - UICollectionView:删除单元格之间的边距