我正在尝试使用远程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异常。
答案 0 :(得分:6)
好的,所以似乎有必要:
remote_api_stub.ConfigureRemoteApiFromServer
ConfigureRemoteApiForOAuth
似乎正常。至少在执行上述访问后,按预期工作。
我希望其他人能够找到这样的帮助。
修改这可能与此主题中讨论的问题有关: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.py
,remote_api_shell.py
等)使用远程api的人,如果您的appengine cookie过期,也可能会发生401错误。
尝试删除它们并再次进行身份验证:
rm ~/.appcfg*
gcloud auth login
如果对Google帐户所做的更改强制退出(例如:启用2因素身份验证),则可能会发生这种情况。