此 IP、站点或移动应用程序无权使用此 API 密钥

Posted

技术标签:

【中文标题】此 IP、站点或移动应用程序无权使用此 API 密钥【英文标题】:This IP, site or mobile application is not authorized to use this API key 【发布时间】:2014-03-22 21:32:48 【问题描述】:

我正在使用https://maps.googleapis.com/maps/api/geocode/json?与服务器密钥和用户 IP 链接以查找任何地址的纬度和经度,当我尝试时,我发现错误为

我有一个来自 google 的服务器访问密钥,并且我已将我的服务器的 IP 地址放在他们的白名单中。

我试图通过 php CURL 访问的 URL 是:

https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true&key=XXXXXXXXXXXX

我得到的结果:

Array ([error_message] => This IP, site or mobile application is not authorized to use this API key. [results] => Array ( ) [status] => REQUEST_DENIED)

我有什么需要配置的吗。地理编码 API 也打开了。

【问题讨论】:

你必须从google获取授权密钥,并将其放入api中 已有 API 密钥可用 检查 Mike 的答案对我有用 接受 mike20132013 的回答!它有效! 这个问题有官方文档:chromium.org/Home/chromium-security/… 【参考方案1】:

我遇到了同样的问题,我发现了这个。

在 url 上,它最后需要服务器密钥,而不是应用程序的 api 密钥。

所以基本上,您只需在 URL 的末尾添加服务器密钥,如下所示:

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=yourlatitude,yourlongitude&radius=5000&sensor=true&key=SERVERKEY

现在,要获取服务器密钥,只需按照以下步骤操作:

1) 转到开发者控制台https://code.google.com/apis/console/

2) 在凭据中,在公共 API 访问下,创建新密钥

3)从选项中选择服务器密钥。

4) 在字段中输入您的 IP 地址,如果您有更多的 IP 地址,您可以在每一行添加。注意: 仅输入 IP 地址当您想将其用于测试目的时。否则,将 IP 地址部分留空。

5) 完成后,单击创建,您的新服务器密钥将生成,然后您可以将该服务器密钥添加到您的 URL。

最后一件事是,您可以像这样将其添加到最后,而不是将 sensor=true 放在 URL 的中间:

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=yourlatitude,yourlongitude&radius=5000&key=SERVERKEY&sensor=true

这肯定会解决问题,只需记住使用Places API 的服务器密钥。

编辑

我相信该网址在过去几年中发生了变化。您现在可以从这里访问开发者控制台 - https://console.developers.google.com/apis/dashboard

导航到开发者控制台 - https://console.developers.google.com/ 或使用详细信息中的链接直接导航到 API 仪表板。 在开发者控制台下,从左侧导航面板中找到Label 选择项目 从左侧导航面板中选择凭据 您可以根据需要从顶部导航栏创建凭据类型。

希望这个答案对您和其他观众有所帮助。祝你好运.. :)

【讨论】:

非常重要 4) 在字段中输入您的 IP 地址,如果您有更多的 IP 地址,您可以在每一行添加。注意:仅在您想使用 IP 地址时输入你的测试目的。否则将 IP 地址部分留空。 没错.. 仅指定 IP 地址/地址用于测试目的。否则,将其留空。因为您将应用程序或 api 密钥限制为仅在特定设备/应用程序上工作。 @johnshumon 是的,我猜.. 很久没有更新答案了。可能是一些新的 API 更改。 可能还想确保 Google Places API Web Service 也是启用的 API 不再有“服务器密钥”之类的东西。请参阅下面的答案。【参考方案2】:
    选择键 API 限制标签 选择 API 密钥 保存 选择应用程序限制 -> 无 保存

【讨论】:

我在 api 限制中列出的服务很少,但没有地理编码 就像一个魅力。谢谢正在尝试地理编码。正如您所指出的,我将应用程序限制设置为无,并且有效。 限制:没有一个非常危险。 禁用安全性不是解决方案! 禁用安全性并不是这里的完美答案【参考方案3】:

除了分配给您的 API 密钥外,Google 还会通过查看 REFERRER 或 IP 地址来验证传入请求的来源。要在 curl 中运行示例,请在 Google APIs console 中创建一个新的 Server Key。创建它时,您必须提供服务器的 IP 地址。在这种情况下,它将是您的local IP address。创建 Server Key 并将您的 IP 地址列入白名单后,您应该能够在 curl 中使用新的 API 密钥。

我的猜测是您可能将 API 密钥创建为 Browser Key,它不需要您将 IP 地址列入白名单,而是使用 REFERRER HTTP 标头标签进行验证。 curl 默认不发送此标签,因此 Google 无法验证您的请求。

【讨论】:

1+ 需要创建服务器 API 密钥才能使用 Google 的 Geocode 服务。还需要从 Google 的 API 控制台启用 Google 地图地理编码服务。谢谢!! 为此苦苦挣扎了好几个小时,才发现现在必须将新的“项目”链接到 Google 云计费帐户,以便 Google API 停止提供这些各种通用错误。阈值可以设置为 0 美元,因此如果使用量超过允许的配额,您将永远不会被收取费用。【参考方案4】:

Google Places API 目前不支持从 Google API 控制台生成的 androidios 密钥。目前仅支持服务器和浏览器键。

【讨论】:

有趣...那么如何生成用于 Android 或 iOS 应用程序的密钥? 您的浏览器键可以在 Android 和 iOS 中使用。在 Google API 控制台中获取浏览器密钥 他们没有一些额外的努力。在昨天令人沮丧的一天之后,我才发现了这一点;应用程序还有一个额外的步骤:***.com/a/58136437/434004【参考方案5】:

您正在尝试使用您以不允许此操作的方式限制的 API KEY。

根据谷歌:

Note: If you need to call web, web service, and/or mobile APIs from the same (client-side) app, create and restrict multiple keys.

所以正确的做法是创建另一个 API KEY,并为此选择正确的限制。在您的情况下,选择“IP 地址”(在“应用程序限制”下),然后使用“添加项目”添加您的服务器 IP。 请注意,留下空白列表是行不通的,并且会导致谷歌将您的限制更改为“无”。

另外,不要忘记在“API 限制”下添加相关 API(在您的情况下为“地理编码 API”)。

最后一件事 - 在您将应用关联到 Google Cloud Billing Account 之前,Google 会阻止使用此 API。所以如果你还没做,一旦你成功得到回复,它会说你必须先做(它有一个免费的启动包)。

【讨论】:

【参考方案6】:

Google Place API 要求在调用 API 时包含referer HTTP 标头。

包括 HTTP 标头“Referer:yourdomain.com”,这应该可以解决响应问题。

【讨论】:

虽然这可能会回答这个问题,但在您的答案中加入一些文字来解释您在做什么总是一个好主意。阅读how to write a good answer。此外,您应该包含一些代码。 能否提供一个sn-p 这就是我所做的,而且效果很好: var options = url: url, headers: Referer:'xxx.herokuapp.com' ; request.get(options, function(...【参考方案7】:

您创建一个没有引用者的密钥 不要输入referer地址

【讨论】:

能否详细说明 在创建密钥时,您可以作为添加引用地址的地方,请检查您是否在此处添加了一些内容。如果添加清除它【参考方案8】:

还应为给定项目启用相应的 API

https://console.developers.google.com/apis/library?project=projectnamehere

【讨论】:

我确实按照您的指示添加了我的项目名称,但它不起作用。【参考方案9】:

对于最新版本的 API,对我来说似乎完全相反。

调用 url https://maps.googleapis.com/maps/api/geocode/json?address=<address>&key=<key> 时出现以下错误

您必须使用 API 密钥来验证对 Google Maps Platform API 的每个请求。更多信息请参考http://g.co/dev/maps-no-account

一旦我将订单切换到https://maps.googleapis.com/maps/api/geocode/json?key=<key>&address=<address>,它就可以正常工作了。

请注意,上面收到的错误消息是我在浏览器中直接访问 URL 时收到的消息。当我从一个软件程序调用 API 时,我收到了一个 html 响应,其中基本上包含以下消息:

很抱歉...但您的计算机或网络可能正在发送自动查询。为了保护我们的用户,我们现在无法处理您的请求。

【讨论】:

为此苦苦挣扎了好几个小时,才发现现在必须将新的“项目”链接到 Google 云计费帐户,以便 Google API 停止提供这些各种通用错误。阈值可以设置为 0 美元,因此如果使用量超过允许的配额,您将永远不会被收取费用。【参考方案10】:

对于 iOS 或 Android 应用程序,密钥需要授予额外的权限。

转到 Google 控制台 -> API 和服务 -> 库。点按您平台的 Places 库,然后点按“启用”。

见https://developers.google.com/maps/gmp-get-started#enable-api-sdk

【讨论】:

【参考方案11】:

身份验证、配额、定价和政策 验证 要使用 Directions API,您必须首先启用 API 并获取正确的身份验证凭据。有关详细信息,请参阅 Google Maps Platform 入门。

配额和定价 查看使用和计费页面,了解有关为 Directions API 设置的配额和定价的详细信息。

政策 Directions API 的使用必须符合 API 政策。

更多了解:访问:--- https://developers.google.com/maps/documentation/directions/start?hl=en_US

【讨论】:

【参考方案12】:
  url = https://maps.googleapis.com/maps/api/directions/json?origin=19.0176147,72.8561644&destination=28.65381,77.22897&mode=driving&key=AIzaSyATaUNPUjc5rs0lVp2Z_spnJle-AvhKLHY

仅在 AppDelegate 中添加类似

            GMSServices.provideAPIKey("AIzaSyATaUNPUjc5rs0lVp2Z_spnJle-AvhKLHY")

并删除此 url 中的密钥。

现在网址是

https://maps.googleapis.com/maps/api/directions/json?origin=19.0176147,72.8561644&destination=28.65381,77.22897&mode=driving

【讨论】:

【参考方案13】:

禁用方向 api 和地理编码 api 并重新启用。

它只工作 5-10 秒,然后自动禁用。

这意味着你只有 5-10 秒的时间来测试你的作业。

【讨论】:

以上是关于此 IP、站点或移动应用程序无权使用此 API 密钥的主要内容,如果未能解决你的问题,请参考以下文章

此 IP、站点或移动应用程序无权使用此 API 密钥 - Android 应用程序

此 IP、站点或移动应用程序无权使用此 API 密钥。从 IP 地址 **** 收到的请求,引用者为空

此站点或 IP 无权使用此 API 密钥

未经授权,此IP,站点或移动应用程序无法使用此API密钥

邮递员:“您无权查看此目录或页面”使用承载令牌

Google Maps API 错误:此 API 密钥无权使用此服务或 API。地方 API 错误:ApiTargetBlockedMapError