为应用程序的Google Cloud Endpoints 2 API提供API密钥的正确方法是什么?

时间:2017-12-06 12:43:51

标签: android google-app-engine api-key google-cloud-endpoints-v2

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

从API中删除API密钥后,任何查询(甚至是curl)都能够检索预期结果。任何关于如何使用代码示例完成此操作的文档也将非常受欢迎。

编辑:我也想知道Google本身是否限制在端点中使用android debug.keystore的SHA-1。

Ps:我之前提出的关于这个问题的问题被不公平地投了下来,收到的唯一答案是国家限制,我相信这与此无关。所以也许这次我会用另一种方式重新解释我的问题。

1 个答案:

答案 0 :(得分:2)

我设法获得至少一种API密钥以使用Google Cloud Endpoints API。以下是:

1)'可用' API密钥是通过对其没有任何限制而生成的(即:不是Android App,Web等)。您可以在API凭据页面中创建密钥时选择密钥限制。

2)'可用' key通过service..setKey(...)方法传递给生成的客户端库。

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

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

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

在Google Cloud Console中 - > API&服务 - >证书 enter image description here

在Java代码中使用API​​密钥:

        public JsonResult GetEmployee(HttpContext context)
     {
        var PersonsQuery = db.vwEmployee_HandoverContact
                             .Where(x => x.Emp_Payroll_No == "EMP2001 "); //passed manually
        return Json(PersonsQuery);
    }