这个IP、网站或移动应用程序未被授权使用此API密钥。

121

我正在使用带有服务器密钥和用户IP的 https://maps.googleapis.com/maps/api/geocode/json 链接来查找任何地址的纬度和经度,但当我尝试时会出现错误。

我从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也已经打开了。


你需要从谷歌获取授权密钥,并将其放入API中。 - Dimag Kharab
已经有一个可用的API密钥了。 - sanket
这个问题有官方文件可供参考:https://www.chromium.org/Home/chromium-security/prefer-secure-origins-for-powerful-new-features - Gopal00005
这个 API 是付费还是免费的? - user20530242
14个回答

153

我也遇到了同样的问题,找到了解决方法。

在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中。

最后一件事是,不要在URL中间放置sensor=true,而应在结尾处添加它,像这样:

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

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

编辑

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

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

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


8
非常重要 4) 在相应的字段中输入您的IP地址,如果您有多个IP地址,可以在每行上添加。注意:仅在测试目的时才输入IP地址。否则,请将IP地址部分留空。 - Sheraz Ahmad Khilji
6
没问题,只需指定IP地址/地址进行测试目的即可。否则,请留空。因为您正在限制应用程序或API密钥仅在特定设备/应用程序上运行。 - mike20132013
1
可能还需要确保 Google Places API Web Service 也是一个已启用的 API。 - Justin Wilson
3
现在已经没有所谓的“服务器密钥”了。请参见我的下面的回答。 - brkeyal
1
您可以在“console.developers.google.com”上编辑当前服务器密钥,并且不要将密钥限制为任何特定设备。“无”。希望能帮到您。 - J A S K I E R
显示剩余10条评论

21
  1. 选择密钥
  2. API限制选项卡
  3. 选择API密钥
  4. 保存
  5. 选择应用程序限制 -> 无
  6. 保存

enter image description here

enter image description here

enter image description here

enter image description here


我在API限制中列出了几个服务,但没有地理编码。 - Muhammad Umer
运行得非常好,谢谢。我正在尝试地理编码。正如你所指出的那样,我将应用程序限制设置为无,并且它起作用了。 - Ravi
8
限制:没有任何限制是相当危险的。 - Deniss M.
19
禁用安全措施不是解决方案! - Bartholomej
请不要让API密钥无限制地使用!必须将新的“项目”链接到计费帐户,这样Google API才会停止产生各种通用错误。可以将阈值设置为$0,这样如果使用量超过允许配额,您就不会被收取费用。 - Sparky

14
除了分配给您的 API 密钥外, Google 还通过查看 REFERRER 或 IP 地址来验证传入请求的源。为了在 curl 中运行示例,请在Google APIs 控制台中创建一个新的 Server Key。在创建时,您必须提供服务器的 IP 地址。在本例中,它将是您的本地 IP 地址。一旦您创建了一个 Server Key 并将您的 IP 地址添加到白名单中,您就应该能够在 curl 中使用新的 API 密钥。
我的猜测是,您可能已经创建了一个作为Browser Key的API密钥,这不需要您将IP地址加入白名单,而是使用REFERRER HTTP头标签进行验证。curl 默认不发送此标签,因此 Google 未能验证您的请求。

需要创建服务器 API 密钥才能使用 Google 的地理编码服务。还需要从 Google 的 API 控制台启用 Google 地图地理编码服务。谢谢! - Sumit Munot
在发现新的“项目”必须链接到Google云计费帐户才能使Google API停止出现各种通用错误之前,我已经为此苦苦挣扎了数小时。阈值可以设置为$0,因此如果使用量超过允许的配额,您将永远不会被收费。 - Sparky

8

目前Google Places API不支持使用在Google APIs Console中生成的Android或iOS密钥。目前仅支持服务器和浏览器密钥。


1
有趣...那么如何为Android或iOS应用程序生成密钥? - Graham Perks
您的浏览器密钥将在Android和iOS中起作用。 在Google APIs控制台中获取浏览器密钥。 - Nazrul Islam
他们需要额外的努力才能做到。昨天我度过了一个令人沮丧的一天后,我才弄清楚这一点:对于应用程序,还有一个额外的步骤:https://dev59.com/o2Eh5IYBdhLWcg3w3mqK#58136437 - Graham Perks

3

你正在尝试使用一个API KEY,但你限制了它的使用,导致无法执行该操作。

根据Google:

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密钥,并选择正确的限制。在您的情况下,选择“IP地址”(位于“应用程序限制”下),并使用“添加项目”添加您的服务器IP。

请注意,留空列表是不起作用的,这将导致谷歌更改您的限制为“无”。

此外,请勿忘记在“API限制”下添加相关API(在您的情况下,“地理编码API”)。

最后一件事 - 谷歌正在阻止使用此API,直到您将其应用程序连接到Google Cloud计费帐户。因此,如果您还没有这样做,一旦成功获得响应,它将说您必须首先这样做(它有一个免费的起始套餐)。


2

使用Google Place API时,需要在API调用时包含referer HTTP标头。

请包含HTTP标头 "Referer:yourdomain.com",这样应该可以解决响应问题。


1
虽然这可能回答了问题,但最好在您的答案中放一些文字来解释您正在做什么。阅读如何撰写一个好的答案。另外,您应该包含一些代码。 - Jørgen R
你能否提供一小段代码? - Sagar Devanga
以下是我的操作,它完美地工作了: var options = { url: url, headers:{ Referer:'https://xxx.herokuapp.com/' } }; request.get(options, function(...) - Florida G.

1
对于最新版本的 API,对我来说恰好相反。
当调用以下 URL 时 https://maps.googleapis.com/maps/api/geocode/json?address=<address>&key=<key> 我遇到了以下错误:

您必须使用 API 密钥对每个请求进行身份验证,以访问 Google Maps 平台 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,因此如果使用量超过允许的配额,您将永远不会被收费。 - Sparky

1
您创建一个没有引用者的密钥,请勿输入引用地址。

请您能否详细说明一下? - Sagar Devanga
2
在创建密钥时,您有一个地方可以添加 Referer 地址,请检查您是否已经添加了一些内容。如果已经添加,请清除它。 - DeadlyDroid

1

我按照你的指示添加了我的项目名称,但它仍然无法工作。 - Ramis

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接