我在Eclipse中有一个GoogleAppEngine(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中的服务器代码?
Bug报告:https://code.google.com/p/googleappengine/issues/detail?id=12556
这是意料之中的事,因为ApiProxy.getCurrentEnvironment()
返回的值不是null
,而是com.google.appengine.tools.development.LocalHttpRequestEnvironment
对象。对于开发服务器,您现在必须使用旧样式(用户名/密码)。
根据文档,您需要将${SDK_ROOT}/lib/appengineremote-api.jar中的appengine-remote-api.jar添加到您的WEB-INF/lib目录中(或将其添加到Maven依赖项中),然后才能工作。
更新:事实上,使用远程API的应用程序引擎中的OAuth似乎尚未实现。我认为在ClientLogin被完全弃用之前,这种情况会发生变化,但目前我建议在公共问题跟踪器上打开一个功能请求。
一种可能的解决方法是创建一个常规控制台应用程序,该应用程序连接到远程API(根据文档中的示例),并可以作为在开发服务器上运行的应用程序引擎应用程序的代理。
除了我的同事Adam和Nikita之前所说的,我可以正式确认,谷歌云工程团队决心在截止日期前为所有受ClientLogin关闭影响的合理用例提供解决方案。
据推测,远程API解决方案将在即将发布的1.9.31/32中提供,尽管这只是一个假设,目前还没有ETA。
作为替代方案,您可以使用Protobufs使用服务帐户凭据远程访问云数据存储,这可能符合您目前的需求。
2016/01/21更新:
该团队已将ClientLogin的关闭截止日期延长至2016年4月12日。
更新2016/04/12:
如前所述,该修复程序已正确应用,并在最新版本的SDK和gcloud中可用。远程API现在可以再次与OAuth一起用于app-to-app(或devserver-to-app)连接。