【问题标题】:Predicton API + GAE: Invalid CredentialsPredicton API + GAE:无效凭证
【发布时间】:2013-06-29 20:21:59
【问题描述】:

我正在尝试让我的 GAE (python) 应用程序与预测 API 对话,但我不断收到 HttpError: <HttpError 401 when requesting ... returned "Invalid Credentials">

我拥有的 GAE 代码是:

from handler_request import Request_Handler # My extended Request Handler
from apiclient.discovery import build
from oauth2client.appengine import AppAssertionCredentials
import httplib2

api_key = "<my key for server apps>"

http = AppAssertionCredentials('https://www.googleapis.com/auth/prediction').authorize(httplib2.Http())
service = build('prediction', 'v1.6', http=http, developerKey=api_key)

class ListModels(Request_Handler):
    def get(self):
        papi = service.trainedmodels()

        result = papi.list(
            project='my_project_number',
            maxResults=10
        ).execute()

        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('Result: ' + repr(result))
  • 所有导入的库都是 Google 的 python API 库,并且正在正确导入。
  • 我正在使用我的应用程序的“服务器应用程序密钥”API 密钥作为 api_key,据我了解,这对于我的用例来说是正确的,因为我的应用程序直接尝试与预测 API 对话

由于某种原因,这不起作用。我直接从这个页面获取了这段代码,并根据我的需要进行了调整:https://developers.google.com/prediction/docs/developer-guide#predictionfromappengine

事实上,如果我复制并粘贴相同的代码,我仍然会收到 Invalid Credentials 错误。

有什么建议吗?

【问题讨论】:

  • 您是否在 API 控制台中为您的应用启用了预测 API?
  • 是的,在 api 控制台和云控制台中都为应用程序启用了它。

标签: python google-app-engine google-oauth google-prediction


【解决方案1】:

需要检查的几件事:

  1. 对于 1.6 版的 Prediction API,您不再需要指定 developerKey(所以我建议不要这样做),AppAssertionCredentials 就足够了。

  2. AppAssertionCredentials 在本地 dev_appserver.py 环境中不起作用,请确保您部署到 .appspot.com 以使用 - 或在本地测试时考虑使用 SignedJwtAssertionCredentials 作为替代品。

  3. 确保将与 App Engine 应用关联的服务帐户添加到启用了预测 API 的项目的 API 控制台中的“团队”中。

【讨论】:

  • 谢谢!我不知道它在 dev_appserver 上不起作用。我阅读的所有文档都没有提到它。我可能错过了它,但如果没有,我建议在您的文档中提及 :) 此外,SignedJwtAssertionCredentials 导入不起作用。我在一些 Google 讨论组中读到这是一个已知问题。这基本上意味着(据我所知)我无法在本地托管应用程序。这是一个遗憾,因为我们并不总是仅仅因为不需要(内部用例)而想要部署应用程序,并且使维护变得更加困难。未来的改进,也许?谢谢
  • SignedJwtAssertionCredentials 可以在 dev_appserver.py 下工作,但目前需要一些额外的步骤: (1) 将 p12 文件转换为 .pem 文件:openssl pkcs12 -in xxxxx-privatekey.p12 -nodes -nocerts | openssl rsa > out.pem (2) 确保 lib pycrypto in 在 app.yaml 中启用:developers.google.com/appengine/docs/python/tools/libraries27 (3) 确保已安装 pycrypto。 (4) 确保您使用的是 1.1 版的 Google Python API 客户端库。
  • @aeijdenberg 你能详细说明一下吗?我安装了pycrypto 2.6,将库放在app.yaml中,但是我应该如何更改代码?导入 SignedJwtAssertionCredentials 时,我不断收到相同的错误..
  • 我能够通过在我的 app.yaml 中明确请求“版本:2.6”来使其工作。当我请求“版本:最新”时它不起作用。你看看有没有帮助?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-26
  • 2022-12-29
  • 2018-02-07
  • 2016-08-10
  • 2021-02-25
  • 1970-01-01
  • 2018-11-07
相关资源
最近更新 更多