2

我在 Google Endpoints 中有一个 API,并且我已经生成了我正在开发的 Android 应用程序访问 API 所需的 API 密钥。但是,在使用生成的客户端库时,我不知道在哪里提供 API 密钥。应用程序发出的每个请求都会返回 403,Android 应用程序被禁止。我也在 SO 中读到它应该在标题中给出,但最接近 Google Endpoints API 文档提到的是 API 密钥应该是 URL 的一部分,但是如果请求似乎并非如此来自Android客户端。

从 API 中删除 API 密钥后,任何查询,甚至 curl,都能够检索到预期的结果。任何有关如何使用代码示例完成此操作的文档也将不胜感激。

编辑:我也想知道谷歌本身是否对在 Endpoints 中使用 android debug.keystore 的 SHA-1 设置了限制。

Ps:我之前关于这个的问题被不公平地否决了,收到的唯一答案是关于国家限制,我确信这与此无关。所以也许这一次我会用另一种方式改写我的问题。

4

1 回答 1

2

我已经设法获得至少一种 API 密钥来使用 Google Cloud Endpoints API。就是这样:

1)“可用”API 密钥是通过对其没有任何限制而生成的(即:不是 Android 应用程序、Web 等)。在 API 凭证页面中创建密钥时,您可以为密钥选择限制。

2)“可用”密钥通过 service..setKey(...) 方法传递给生成的客户端库。

这多少产生了我想要的东西。只允许能够识别自己的调用者调用 API。它起作用的原因(从这一点开始的完整假设和猜测工作)是生成的客户端库向 API 发出 HTTPS 请求,因此,授权检查应该由 API(端点框架)在上下文中完成HTTPS 请求,而不是在 Android 应用程序的上下文中。

如果这是真的,那么我非常有兴趣了解 Android 应用程序如何使用生成的客户端库对 API 进行“正确”调用。

更新:当前设置的屏幕截图和代码

在 Google Cloud Console -> API 和服务 -> 凭据中 在此处输入图像描述

Java代码中API Key的使用:

// Call to the generated client library for the API
DataCollection dataCollection =  service.getDataAPIMethod()
                .setX(...)
                .setY(...)
                .setZ(...)
                .setKey("***")
                .execute();
于 2017-12-07T14:20:39.200 回答