谷歌API认证:客户端的来源无效

88

在向Google API (gapi) 发出认证请求时,它在检查来源 (checkOrigin) 上返回 false。

我已经移除了任何客户端ID或任何直接与我的帐户相关联的内容,并用正则表达式替换它,以表示数据的参考信息。

URL:https://accounts.google.com/o/oauth2/iframerpc?action=checkOrigin&origin=https%3A%2F%2Flocal.tools&client_id=(\d{21})

我的来源URL是本地URL,即https://local.tools

结果为:{valid: false}

我正在使用此处找到的示例,没有偏离原来的情况(除了将clientid替换为我的21位数字clientid):https://ga-dev-tools.appspot.com/embed-api/third-party-visualizations/

我尝试显示的项目在演示网站上很好地显示,但无法通过在我的 local.tools 网站上的“非有效客户端来源”错误。


“https://local.tools” 是否已在 API 控制台中配置,并且您的本地服务器运行在 80 端口?尝试编辑您的 /etc/hosts,将演示站点 URL 指向 127.0.0.1,看看会发生什么。 - pinoyyid
什么好事也不会发生,因为我的开发环境不在127.0.0.1上。它运行在哪个端口也无所谓,除了80端口外,其他端口也可以使用。 - Francis Lewis
Google API身份验证:客户端的来源无效。 --- 这可能是因为您在创建客户端ID和通过网页登录时使用了相同的电子邮件地址。 - Sahil Mujawar
18个回答

180

清除浏览器缓存。在Chrome中遇到此错误后,我创建了一个新的客户端ID,但仍然遇到了问题。打开Firefox就可以正常运行,所以我清除了Chrome上的缓存,然后它就开始工作了。


27
很难相信缓存在其中扮演如此重要的角色。 - Adarsh Khatri
2
或者休息一小时左右,尤其是在不想清除所有缓存的设备上或在移动设备上更难以这样做时。 - Simon_Weaver
2
令人惊讶的是,清除浏览器缓存对我也解决了这个问题... - dorian
1
太好了!清除缓存后它对我有效,非常感谢。 - Mohan
如果您不想失去所有的 cookie,历史记录等,我有一个小建议。在 Chrome 中,您可以输入不同的用户 - 只需以访客身份进入,这样您就不必删除您的所有浏览历史记录了。 - Guy Nir
显示剩余4条评论

80

在使用示例时,我收到了相同的控制台错误消息:https://developers.google.com/analytics/devguides/reporting/embed/v1/getting-started

文档指出不要忽视两个关键步骤(“按照说明进行操作时,确保不要忽略以下两个关键步骤:启用Analytics API [&] 设置正确的来源”,但没有明确说明在哪里设置正确的来源。

由于我的客户端ID没有起作用,所以我创建了一个新项目和一个新客户端ID。 新项目可能是不必要的,但我会保留(并使用)它。

下面是解决方法:

在创建凭据期间,您将看到一个名为“限制”的部分,其中有JavaScript来源,重定向URI或两者都可以输入。 这是您可以输入来源的位置。

保存并复制您的客户端ID(和密钥)。

在按照此过程生成的新客户端ID之后,我使用新生成的OAUTH凭据并分配原点后,我的脚本成功运行。


1
是的,那正是我所需要的。谢谢!现在看起来似乎很明显了,但文档有点难以理解。 - Francis Lewis
2
如果我在本地主机上进行测试,如何添加oauth?例如,如果我需要允许访问http://localhost:9000/en/login。 - rosu alin
3
我的脚本在旧应用程序中使用新凭据成功运行。我认为这是谷歌的一个错误,因为我确实尝试将我的来源添加到旧凭据中。 - Franklin Yu
1
我遇到了同样的问题,这些步骤对我有用!诀窍是在创建凭据之前启用分析API。 - Sahan Serasinghe
似乎2021年更糟糕了:之前可用的设置现在不起作用了。似乎您不能再输入“localhost”来源了。它显示“无效来源”。 - Fabien Quatravaux
显示剩余6条评论

23

尝试清除缓存,然后强制刷新,我曾遇到同样的错误,但是当我在Chrome的无痕浏览器上尝试运行时它起作用了。


4
值得注意的是,在Chrome浏览器中,使用Shift+F5或Ctrl+F5进行普通硬刷新并不能解决问题,直到我按F12打开控制台选项卡,然后右键点击刷新按钮并选择“清空缓存并强制重新加载”,才能解决问题。 - usernotnull

19

1
嗨 - 你在哪里设置这个? - Steve Tomlin
请查看这个链接 Steve:https://developers.google.com/identity/one-tap/web/guides/get-google-api-clientid - walter
1
这对我有用。最初,我只列出了 http://localhost:port。一旦我在带端口的地址旁边添加了 http://localhost(不带端口),它立即开始工作。 - JoshKraker
1
是的!同时添加 http://localhost 和 http://localhost:<端口号>。 - jobima
1
如果我的端口号不固定,我能使用通配符来允许本地主机上的所有端口吗? - Martin Braun

17

这救了我的一天..!!! 错误看起来完全无关,但是这个有效。 - Clain Dsilva
经过许多小时的努力,我终于解决了我的问题。 - GIA

14
您可能会这样使用客户端 ID:<CLIENT_ID>.apps.google.com。 请确保您的客户端 ID 没有“.apps.google.com”后缀。

这对我有效。 我认为它有效的原因是具有查询参数中的client_id = <CLIENT_ID> .apps.google.com 的原始 URL 被 Google 缓存了相当长的时间,而具有更新的ClientID的URL则没有缓存(即使这两个应该是相同的)。 - qff
这是我尝试过的唯一有效解决方案。 - Collie
2
在我的情况下,我不得不删除“.apps.googleusercontent.com”,神奇地它开始工作了。 - Hemendra Singh
谢谢你,你帮我省了很多时间! - MehranTM

12

创建新的OAuth凭证对我很有效


1
在我查看SO之前,我认为“可能是缓存”的问题。在清除缓存无效后,这个解决方案起作用了。 - Hagai Wild
1
你的解决方案对我很有效。从谷歌来看有点奇怪。 - Raimundo
即使我创建了一个新的客户端ID,它对我也起作用。 - KarthikNayak98

11

很好,这是新客户地址的正确答案。 - Lucas Andrade

7

更新了已授权的 JavaScript 来源后,浏览器仍然缓存旧数据,所以我需要清空缓存并强制刷新,然后它才能正常工作。

1. 更改已授权来源


enter image description here

2. 打开开发者工具(F12),然后右键单击重新加载按钮


enter image description here


4

在Chrome上清除缓存是有效的!

请按照以下步骤清除缓存。

  1. 打开开发者工具(右键单击页面并选择检查/按F12)
  2. 在打开开发者工具时,右键单击Chrome重新加载按钮。(您将找到清除缓存并重新加载站点的选项。)

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