提供的API密钥已过期(用于Directions API)

时间:2020-03-27 12:07:22

标签: ios api google-maps

我调查了前15个“类似问题”,但没有一个解决了我的问题。有时,对于同一个API请求,我遇到的错误是“ This IP, site or mobile application is not authorized to use this API key. Request received from IP address {*ip_address*}, with empty referer”。我也进行了搜索,但对我而言,所建议的解决方案均无济于事。

我目前的情况

  • 我正在iOS项目中致电https://maps.googleapis.com/maps/api/directions/json?key=MYKEY&some_other_params
  • 我使用的API密钥仅限于Bundle ID
  • 我有一个项目列表(我们将其称为定位项目),当单击该项目时,我会调用Direction API获取路线信息
  • 我交替出现上述两个错误。这意味着有时会收到过期错误,有时会收到IP错误。我收到相同位置商品的错误。

已启用API:

  • Directions API
  • 地理位置API
  • iOS版Maps SDK
  • 地理编码API
  • Places API

Bundle ID没问题

我知道我的捆绑包ID是正确的,因为我将其与另一服务(即Firebase)一起使用。为了消除错误的愚蠢错误,我从Firebase API凭据中复制了相同的Bundle ID。我的Firebase API密钥仅限于相同的Bundle ID和Firebase服务。它工作正常。

仅API限制

为消除Bundle ID问题,我还尝试了来限制应用程序限制,并选择限制API。我一次添加了上面列出的API,并称为Directions API。没有任何效果,没有一个API(Directions API)或所有元素都没有。

关于Places API的怪异事物

我得到的一个怪异行为是我创建了一个新的API密钥,并且它不受任何限制地工作。更奇怪的是,我暂时禁用了Places API。我这样做是因为我想“刷新”我的API。我在另一个线程中读到,通过禁用并重新启用Places API解决了IP问题,因此我将其关闭但没有立即打开。我使用了一个新的API密钥,然后点击我的位置商品即可路由信息(我得到了想要的结果)。

其他限制(使用限制和计费)

我知道,这也与限制Directions API的尝试次数无关。 The documentation指出该限制为每秒50个请求。此外,我使用不受限制的API密钥进行了“项目的快速点击”,并且我总是得到路线信息。我们的项目也启用了结算功能,所以这也不是问题。

卡有不受限制的密钥

目前,我们正在使用不可接受的非受限密钥。我想知道,为什么使用不受限制的密钥可以完美地工作而限制它却不能。我确定我缺少配置,但是我尝试了所有可能想到的组合。

1 个答案:

答案 0 :(得分:-1)

仅限于您应用程序的捆绑包ID的

API密钥不适用于后端Web服务请求(例如Directions API)。这些API密钥仅适用于从Places SDK和Maps SDK for iOS发出的请求。这就是为什么出现错误“此IP,站点或移动应用程序无权使用此API密钥。从IP地址{ ip_address }收到的请求,带有空引用”的原因。

根据Google Maps API key best practices,对于直接用于从移动应用程序发送的用于Web服务的API密钥,您可以执行以下一种或多种技术来保护API密钥:

  • 使用代理服务器。。代理服务器提供了与适当的Google Maps Platform API进行交互的可靠来源。然后使用IP限制来限制您的API密钥。
  • 混淆或加密API密钥或签名机密。这会使直接从应用程序中抓取API密钥和其他私有数据变得复杂。
  • 使用CA固定或证书固定来验证服务器资源是否有效。 CA固定检查服务器的证书是由受信任的证书颁发机构颁发的,并防止中间人攻击可能会导致第三方发现您的API密钥。