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

AppEngine API client-authentification stopped working after update

我有一个 Java 应用引擎后端,带有一个网络客户端和一个 Android 客户端。 Android 客户端使用生成的客户端库和网站 Java 端点的脚本客户端库。

我们在 App Engine 上有 3 个环境:Dev、Staging 和 Production。 我已经将更新推送到开发人员,它正在应用程序和网站上运行。

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

网站客户端

网站使用 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 经理证书

API 管理器中的凭据保持不变,不必更改。我检查了所有这些,它们看起来是正确的。这对我来说毫无意义,除非 Google 今天有一些愚蠢的失败或其他事情。

APIs 资源管理器

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

看起来 API 凭证不再 link 到我的 API。我觉得很奇怪,你在任何地方都无法启用或禁用你自己的 API(只有 Google)。错误中的 link 激活 API 不起作用,因为它是一个 link 就好像它是一个 Google API.

原来后端配置有问题。我只用暂存配置替换了 appengine-web.xml。但是我没有更改后端的 clientID 和 weblientId,因为它们位于名为 Constants.java 的文件中,如果它是 DEV、STAGING 或 PRODUCTION 后端,我必须手动设置(aarggh)。这仍然被标记为 DEV。

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

也许这里有人知道我如何使用并生成 BuildConfig.java 常量来制作类似于 gradle 中的风味的模拟解决方案。那太好了。

编辑 我现在正在结合 maven-war-plugin 创建 maven 配置文件,我可以为不同的构建类型创建不同的配置文件。这可用于不同的 appengine-web.xml 参见: 我现在仍在尝试寻找一些东西以在构建脚本中包含 ANDROID_CLIENT_ID 和 WEB_CLIENT_ID 的常量。我无法从文件中加载它们,因为它们必须是常量,因为它们用于 API 的属性。 我用 http://www.mojohaus.org/templating-maven-plugin/ 生成 Contstants.java。我唯一无法开始工作的是它在切换配置文件时不会自动生成它。我仍然必须手动启动 templating:filter-sources.