AppEngine - 远程API返回401和太多身份验证

时间:2015-10-27 21:15:46

标签: python google-app-engine google-oauth2

我正在尝试使用远程API连接到AppEngine实例,如下所示:

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = ".../path/to/key"
remote_api_stub.ConfigureRemoteApiForOAuth(
    server.encode('ascii'), path, secure=True
)

path/to/key指向在Google Cloud(Beta)中创建的JSON文件, API Manager - >凭证 - >添加凭据 - >服务帐户。根据权限面板,服务帐户“可以修改”。

当我运行此操作时,我在控制台上收到类似这样的错误,对应于401(在App Engine日志查看器中报告):

  File "/usr/local/share/app-engine-python/google/appengine/ext/remote_api/remote_api_stub.py", line 768, in ConfigureRemoteApiForOAuth
    rpc_server_factory=rpc_server_factory)
  File "/usr/local/share/app-engine-python/google/appengine/ext/remote_api/remote_api_stub.py", line 835, in ConfigureRemoteApi
    app_id = GetRemoteAppIdFromServer(server, path, rtok)
  File "/usr/local/share/app-engine-python/google/appengine/ext/remote_api/remote_api_stub.py", line 569, in GetRemoteAppIdFromServer
    response = server.Send(path, payload=None, **urlargs)
  File "/usr/local/share/app-engine-python/google/appengine/tools/appengine_rpc_httplib2.py", line 258, in Send
    NeedAuth()
  File "/usr/local/share/app-engine-python/google/appengine/tools/appengine_rpc_httplib2.py", line 234, in NeedAuth
    RaiseHttpError(url, response_info, response, 'Too many auth attempts.')
  File "/usr/local/share/app-engine-python/google/appengine/tools/appengine_rpc_httplib2.py", line 85, in RaiseHttpError
    raise urllib2.HTTPError(url, response_info.status, msg, response_info, stream)
urllib2.HTTPError: HTTP Error 401: Unauthorized Too many auth attempts.

我检查了/google/appengine/ext/remote_api/remote_api_stub.py:760似乎设置了正确的凭据,应该传递给远程api。

app.yaml- remote_api: on下的基本设置为builtins

此设置适用于本地dev_appserver.py,因此我认为问题出在Google服务器/云设置上。

我在 App Engine - >中尝试了两种身份验证方案。设置 - >应用程序设置(Google Accounts API和Google Apps域名)。

我尽可能地跟随Google Application Default Credentials,但也许我错过了什么?

从命令行可能还值得注意:

$ GOOGLE_APPLICATION_CREDENTIALS=~/path-to-key
    remote_api_shell.py -s APPID.appspot.com --secure APPID

也提供相同的401异常。

3 个答案:

答案 0 :(得分:6)

好的,所以似乎有必要:

  1. 转到appspot.com管理页面。
  2. 在“应用程序设置”下,启用“云集成”
  3. 云控制台页面API Manager中创建新服务帐户(现有服务帐户似乎不起作用)
  4. 切换到remote_api_stub.ConfigureRemoteApiFromServer - 进一步检查时,ConfigureRemoteApiForOAuth似乎正常。
  5. 至少在执行上述访问后,按预期工作。

    我希望其他人能够找到这样的帮助。

    修改这可能与此主题中讨论的问题有关:https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/google-cloud-insiders/ohnp1XAOdiM/KrQF8_DAAAAJ

答案 1 :(得分:5)

仅遇到此问题,这里没有任何解决方案。 对我唯一有效的方法是在远程shell命令中添加--secure选项

$APPENGINE/remote_api_shell.py  --secure -s my-app.appspot.com

答案 2 :(得分:3)

对于从命令行(bulkloader.pyremote_api_shell.py等)使用远程api的人,如果您的appengine cookie过期,也可能会发生401错误。

尝试删除它们并再次进行身份验证:

rm ~/.appcfg* gcloud auth login

如果对Google帐户所做的更改强制退出(例如:启用2因素身份验证),则可能会发生这种情况。