此 IP、站点或移动应用程序无权使用此 API 密钥 - Android 应用程序
Posted
技术标签:
【中文标题】此 IP、站点或移动应用程序无权使用此 API 密钥 - Android 应用程序【英文标题】:This IP, site or mobile application is not authorized to use this API key - Android App 【发布时间】: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 密钥并希望限制该密钥的用户。
我注意到的几点:
-
Google 确实识别出我正在使用有效的 API 密钥。
Google 确实识别出正确的 SHA-1 签名,如果我使用无效的 API 密钥,Google 将显示签名错误。
任何帮助将不胜感激!
【问题讨论】:
This IP, site or mobile application is not authorized to use this API key的可能重复 【参考方案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 密钥而不是没有安全性的密钥。以上是关于此 IP、站点或移动应用程序无权使用此 API 密钥 - Android 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
此 IP、站点或移动应用程序无权使用此 API 密钥 - Android 应用程序
此 IP、站点或移动应用程序无权使用此 API 密钥。从 IP 地址 **** 收到的请求,引用者为空
Google Maps API 错误:此 API 密钥无权使用此服务或 API。地方 API 错误:ApiTargetBlockedMapError