【问题标题】:This IP, site or mobile application is not authorized to use this API key - Android App此 IP、站点或移动应用程序无权使用此 API 密钥 - Android 应用程序
【发布时间】:2016-04-03 16:19:44
【问题描述】:

我正在尝试将我的 Android API 密钥(用于 Google Maps Direction API)的使用限制为使用我的 SHA-1 指纹签名的 Android 应用程序。当我不在 Google Developers Console 上的凭据下“添加包名称和指纹” 时,该密钥将完全正常工作。但是当我添加它们时,会出现此错误:

W/System.err:com.google.maps.errors.RequestDeniedException:此 IP、站点或移动应用程序无权使用此 API 密钥。从 IP 地址 XX.XX.XXX.XXX 收到请求,引用者为空

为解决此错误而给出的大多数答案都是针对 Places API 并通过切换到服务器 API 密钥来解决的。我需要使用 Android 密钥并希望限制该密钥的用户。

我注意到的几点:

  1. Google 确实识别出我正在使用有效的 API 密钥。
  2. Google 确实识别出正确的 SHA-1 签名,如果我使用无效的 API 密钥,Google 将显示签名错误。

任何帮助将不胜感激!

【问题讨论】:

标签: android api google-maps


【解决方案1】:

如您所见,任何 API 密钥只要不受保护就可以在此处使用,但受保护的 Android API 密钥不适用于 Google Maps Directions API。

很简单,您需要为 Directions API(或任何网络服务 API)使用服务器 API 密钥。

来自the documentation:

Google Maps Directions API 只能使用服务器密钥。

原因是这些网络服务 API 最初旨在用于网站,而不是 Android 应用程序。

此外,保护服务器密钥的唯一方法是使用 IP 地址,因此无法在客户端执行此操作。

Google 的官方建议是使用应用程序向其发出请求的代理服务器,并从代理服务器发出 Directions API 请求。

参见此处(这是特定于 Places 网络服务 API,但对任何网络服务 API 都有效):https://groups.google.com/forum/#!topic/google-places-api/SmujrL-pDpU

来自 Google 员工的回复:

阿列克谢,

任何存储在客户端的东西都是可以妥协的,即使是混淆, 你只是让专门的黑客稍微慢了一点 访问。

我建议您设置应用程序以发送您的地点 向代理服务器请求没有 API 密钥以接收请求, 将 API Key 附加到请求的末尾,发送请求,然后 然后接收请求的响应并将其返回给您的 应用。

干杯,

克里斯

【讨论】:

  • 感谢您的回答。尽管我仍然很难相信 Google 不会让您使用更安全的 API 密钥而不是没有安全性的密钥。
猜你喜欢
  • 1970-01-01
  • 2014-07-19
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
相关资源
最近更新 更多