谷歌OAuth 2授权-错误:redirect_uri_mismatch

617

我在https://code.google.com/apis/console网站上注册了我的应用程序,设置了生成的客户端ID客户端密钥到我的应用程序中,并尝试使用Google登录。

不幸的是,我收到了以下错误消息:

Error: redirect_uri_mismatch
The redirect URI in the request: http://127.0.0.1:3000/auth/google_oauth2/callback did not match a registered redirect URI

scope=https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
response_type=code
redirect_uri=http://127.0.0.1:3000/auth/google_oauth2/callback
access_type=offline
approval_prompt=force
client_id=generated_id

这条信息是什么意思,我该如何修复它? 我使用了gem omniauth-google-oauth2


35
如遇此问题,您可通过在浏览器中访问以下URL进行调试:https://accounts.google.com/o/oauth2/auth?client_id={client_id}&response_type=token&redirect_uri={redirect_uri}&scope={scope},而无需运行整个应用程序进行测试。请注意,翻译时尽量保持原意,使内容更通俗易懂,不要添加解释或其他内容。 - Jack M
2
我注意到,谷歌自动将 redirect_uri 绑定在双引号中(redirect_uri="whatever")以上的 URL 中,并导致此错误。如果我删除这个双引号,我就能通过下一个屏幕了。现在,我们该如何避免这个双引号,因为它是由谷歌自动重定向的? - Abhishek Soni
@JackM,response_type 不应该等于 code 吗?那么 token 是什么? - Benyamin Jafari
47个回答

10

清单:

  • http 还是 https
  • & 还是 &
  • 斜杠(/)还是开放的空格?
  • (CMD/CTRL)+F,在凭据页面中搜索完全匹配项。如果找不到,则搜索缺失项。
  • 等待 Google 刷新。如果您经常更改,则每半个小时可能会发生,或者它可能会留在池中。对于我的情况,大约需要半个小时才能生效。

9
当您在https://code.google.com/apis/console注册您的应用程序并创建客户端ID时,您有机会指定一个或多个重定向URI。您在认证URI上使用的redirect_uri参数的值必须完全匹配其中之一。

每个领域都有问题,在使用深度Angular链接方面也是如此,因为谷歌并不认可[http://landed1.github.io/videos.html#/oauth2callback]作为一个有效的URL。 - landed

8

这个问题已经有详细的解答,但最近(大约一个月前),Google不再接受我的URI,因此它无法工作。我确信以前它是可以工作的,因为有一个用户已经注册了。

无论如何,问题出在常规的400错误:redirect_uri_mismatch,但唯一的区别是它从https://变成了http://,而Google不允许您注册http://重定向URI,因为它们处于生产发布状态(而不是本地主机)。

问题出在我的回调函数上(我使用Passport进行身份验证),我只做了以下操作:

callbackURL: "/register/google/redirect"

我阅读了文档,它们使用的是完整的URL,所以我将其改为

callbackURL: "https://" + process.env.MY_URL+ "/register/google/redirect"

我将https localhost添加到我的接受URI中,以便在本地测试,并且它再次开始工作。

TL;DR 使用完整的URL,这样您就知道您要重定向到哪里了。


1
谢谢,那就是问题所在。 - Mujtaba

7

对我来说,原因是在“授权重定向URI”列表中,我错误地放入了https://developers.google.com/oauthplayground/而不是https://developers.google.com/oauthplayground(结尾没有/)。


1
谢谢!我找不到问题出在哪里。 - Eloi

6

6

1
请注意URL末尾的字符“/”。有时需要,有时不需要。 - Ángel Javier Mena Espinosa
我们可以将localhost保留为request_uri,即使是在实际网站上吗? - Unbreakable

6

注意URL末尾的额外/http://localhost:8000http://localhost:8000/是不同的。


6

请确保输入的是URL而不仅仅是域名。 所以,应该是: domain.com/somePathWhereYouHadleYourRedirect 而不是 domain.com


1
是的,这就是我在使用NextAuth时遇到的问题。当使用默认的GoogleProvider时,它会使用https://example.com/api/auth/callback/google,实际上您必须在仪表板中指定它。 - Ian MacFarlane

6

2015年7月15日 - 上周使用此脚本登录时有效的登录已经失效。

<script src="https://apis.google.com/js/platform.js" async defer></script>

停止工作并开始导致错误400与Error: redirect_uri_mismatch

在详细信息部分:redirect_uri=storagerelay://...

我通过更改解决了这个问题:

<script src="https://apis.google.com/js/client:platform.js?onload=startApp"></script>

遇到了相同的400错误,但在我的Cordova WebView中更改脚本并没有起作用。 - Nick Spacek
@NickSpacek请检查是否缺少双引号。 - tony gil

4

我也遇到了这个错误:Error-400: 重定向URI不匹配

这不是一个服务器客户端的错误,但你只需要检查一下,确保在结尾没有添加/(斜杠),就像这样:

重定向URL列表 ❌:

https://developers.google.com/oauthplayground/

只需要做这个 ✅:

https://developers.google.com/oauthplayground

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