AppEngine API客户端身份验证在更新后停止工作

时间:2016-06-29 16:09:47

标签: javascript java android google-app-engine google-cloud-endpoints

我有一个带有Web客户端和Android客户端的Java应用程序引擎后端。 Android客户端使用生成的客户端库和网站使用端点的JavaScript客户端库。

我们在应用引擎上有3个环境:Dev,Staging和Production。 我已经将更新推送到dev,它正在开发应用程序和网站。

现在我已经更新了Staging环境的后端,并且我遇到了很多身份验证问题。在验证或签署应用程序时没有任何改变,所以我不明白它是什么。

网站客户端

网站使用G +登录,在调用自定义应用引擎API的方法后,它会出现以下错误:

"Access Not Configured. has not been used in project 986034197583 before or it is disabled. Enable it by visiting [url] then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry."

发现#restDescription是成功的,它显示了方法。

Android客户端

Android应用也使用G +登录并出现以下错误(在Google云端控制台的日志中):

com.google.api.server.spi.auth.GoogleJwtAuthenticator authenticate: ClientId is not allowed: 986034197583-51qasim2gmqql5vc652vk3u3lpapegb6.apps.googleusercontent.com

应用程序未使用其他密钥库签名且SHA-1哈希值相同(我已检查过)。

API Manager凭据

API管理器中的凭据保持不变,不应该更改。我检查了所有,他们看起来正确。除非Google今天有一些愚蠢的失败或事情,否则这对我没有任何意义。

API Explorer

当我使用API​​ Explorer测试API时,它正在运行。 (apis-explorer.appspot.com)

看起来API凭据不再链接到我的API。我发现很奇怪你无处可以启用或禁用你自己的API(只有谷歌的API)。用于激活API的错误中的链接不起作用,因为它是一个链接,就像它是Google API一样。

1 个答案:

答案 0 :(得分:0)

事实证明后端配置有问题。我只用登台配置替换appengine-web.xml。但是我没有更改后端的clientID和weblientId,因为它们位于名为Constants.java的文件中,我必须手动设置它是DEV,STAGING还是PRODUCTION后端(aarggh)。这仍然标记为DEV。

我们确实需要这个后端的一个buildcript来防止这样的情况。因为我是Android开发人员,所以我只知道gradle。这个项目是由一个离开公司的Java开发人员开发的,现在我必须维护它。它使用Maven,因此我不知道如何制作不同的构建目标,例如在Android Studio中使用不同的常量。

也许有人在这里知道如何在Gradle中创建类似于类似的类似解决方案并生成BuildConfig.java常量。那会很棒。

修改 我现在正在创建maven配置文件,现在结合maven-war-plugin我可以为不同的构建类型制作不同的配置文件。这可用于不同的appengine-web.xml 请参阅:web.xml configuration based on Maven profile 我现在还在尝试在构建脚本中找到包含ANDROID_CLIENT_ID和WEB_CLIENT_ID的常量的东西。我无法从文件中加载它们,因为它们必须是常量,因为它们用于API的属性中。 我使用http://www.mojohaus.org/templating-maven-plugin/生成Contstants.java。我唯一无法工作的是它在切换配置文件时不会自动生成它。我仍然需要手动启动模板:filter-sources。