2

我在 Eclipse 中有一个 Google AppEngine (Java) 项目。我想在 Eclipse 中调试我的本地代码,但使用 AppEngine 上部署的数据库。到目前为止,我使用带有用户名/密码的远程 API(旧方式)

此方法将被弃用,我想使用 OAuth,但是当我尝试使用它时,它会引发异常:

java.lang.IllegalStateException: OAuth-based authorization not supported for clients running on App Engine
at com.google.appengine.tools.remoteapi.RemoteApiOptions.getOrCreateHttpTransportForOAuth(RemoteApiOptions.java:359)
at com.google.appengine.tools.remoteapi.RemoteApiOptions.useApplicationDefaultCredential(RemoteApiOptions.java:162)

当我在 Eclipse 中运行一个使用远程 api 的简单 Java 客户端应用程序时,一切都很好。但是如果客户端是Eclipse中的AppEngine开发环境,就不行了。

如何使用 appengine 数据库在 eclipse 中调试服务器代码?

错误报告:https ://code.google.com/p/googleappengine/issues/detail?id=12556

4

3 回答 3

0

这是预期的,因为返回的值ApiProxy.getCurrentEnvironment()将不是null,而是com.google.appengine.tools.development.LocalHttpRequestEnvironment对象。对于开发服务器,您现在必须使用旧样式(用户名/密码)。

于 2015-11-20T10:53:59.470 回答
0

根据文档,您需要在此之前将appengine-remote-api.jar${SDK_ROOT}/lib/appengine-remote-api.jar 添加到您的 WEB-INF/lib 目录(或将其添加到您的 Maven 依赖项)将工作。

更新:确实,来自 App Engine 和 Remote API 的 OAuth 似乎尚未实现。我认为这会在 ClientLogin 完全弃用之前发生变化,但现在我建议在公共问题跟踪器上打开一个功能请求。

一种可能的解决方法是创建一个连接到远程 API 的常规控制台应用程序(根据文档中的示例),并且可以充当在开发服务器上运行的 App Engine 应用程序的代理。

于 2015-11-20T04:01:13.920 回答
0

除了我的同事 Adam 和 Nikita 之前所说的之外,我可以正式确认 Google Cloud 工程团队决心在截止日期之前为所有受ClientLogin 关闭影响的合理用例提供解决方案。

据推测,Remote API 解决方案将在即将发布的 1.9.31/32 版本中提供,尽管这只是一个假设,目前还没有 ETA。

作为替代方案,您可以使用服务帐户凭据通过 Protobufs远程访问 Cloud Datastore,这可能满足您目前的需求。

2016 年 1 月 21 日更新:

团队已将 ClientLogin 关闭截止日期延长至 2016 年 4 月 12 日。

2016 年 4 月 12 日更新:

如前所述,该修复程序已正确应用并在最新版本的 SDK 和 gcloud 中可用。远程 API 现在可以再次与 OAuth 一起用于应用到应用(或开发服务器到应用)的连接。

于 2015-12-22T10:08:11.943 回答