Google OAuth 2授权 – 错误:redirect_uri_mismatch

在网站https://code.google.com/apis/console上,我注册了我的应用程序,将生成的客户端ID客户端密钥设置为我的应用程序,并尝试使用Googlelogin。 不幸的是,我收到了错误信息:

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 omn​​iauth-google-oauth2

redirectURI(返回响应的地址)必须在API控制台中注册,并且错误表明你没有这样做,或者没有正确完成。

转到您的项目的控制台,并在API访问下查找。 您应该在那里看到您的客户端ID和密码,以及redirectURI列表。 如果您所需的URI未列出,请单击编辑设置并将URI添加到列表中。

如果您使用的是Google+ javascriptbutton ,则必须使用postmessage而不是实际的URI。 我花了几乎整整一天的时间才弄明白这一点,因为Google的文档由于某种原因没有明确说明。

在我的情况下,它是wwwnon-www URL。 实际网站具有wwwurl,Google Developer Console中的授权redirecturl具有non-wwwurl。 因此,redirectURI存在不匹配。 我通过Authorized Redirect URIs Google Developer Console中的Authorized Redirect URIs更新为www URL来解决此问题。

其他常见的URI不匹配是:

  • 在授权redirectURI中使用http://https://作为实际URL,反之亦然
  • 在授权redirectURI中使用尾部斜线( http://example.com ),而不使用尾部斜线( http://example.com )作为实际URL,反之亦然

以下是Google开发者控制台的分步截图,对于那些难以定位开发者控制台页面以更新redirectURI的人来说,这将是有帮助的。

  1. 转到https://console.developers.google.com

  2. select你的项目

选择你的项目

  1. 点击菜单图标

点击菜单图标

  1. 点击API Manager菜单

选择API管理器菜单

  1. 点击Credentials菜单。 在OAuth 2.0 Client IDs ,您将find您的客户端名称。 在我的情况下,它是Web Client 1 。 点击它,会出现一个popup窗口,您可以在其中编辑授权的Javascript来源授权的redirectURI

选择凭证菜单

这是一篇关于创build项目和客户端ID的Google文章。

对于我的Web应用程序,我通过编写纠正了我的错误

 instead of : http://localhost:11472/authorize/ type : http://localhost/authorize/ 

请务必检查协议“http://”或“https://”作为谷歌检查协议。 最好在列表中添加两个URL。

这似乎很奇怪,很烦人,没有“一个”解决scheme。 对于我http:// localhost:8000没有解决,但http:// localhost:8000 /解决。

2015年7月15日 – 上个星期在login时使用这个脚本的签名

 <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> 

当您通过https://code.google.com/apis/console注册您的应用并创build客户端ID时,您将有机会指定一个或多个redirectURI。; auth URI上的redirect_uri参数的值必须与其中的一个完全匹配。

redirecturl区分大小写。

在我的情况下,我添加了: http:// localhost:5023 / AuthCallback / IndexAsync http:// localhost:5023 / authcallback / indexasync

清单:

  • http还是https
  • &&amp;
  • 尾部斜线( / )或打开
  • (CMD/CTRL)+F ,search凭证页面中的完全匹配。 如果没有find,然后search丢失的一个。
  • 等到谷歌刷新它。 如果你经常改变或者可能停留在游泳池里,可能会在每半小时发生一次。 对我来说,差不多半个小时才能生效。

就我而言,我的凭证申请types是“其他”。 所以我找不到凭证页面中的Authorized redirect URIs 。 它似乎出现在应用程序types:“Web应用程序”。 但是你可以点击Download JSONbutton来获取client_secret.json文件。 在这里输入图像说明

打开json文件,你可以find这样的参数: "redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"] 。 我select使用http:// localhost ,它对我来说工作正常。

让我完成@ Bazyl的回答:在我收到的消息中,他们提到了URI "http://localhost:8080/" (当然,这似乎是一个内部的谷歌configuration)。 我更改了那个"http://localhost:8080/"的授权URI,并且消息不再出现…并且video上传了… APIS文档非常蹩脚…每次我有一些与谷歌apis工作,我只是觉得“幸运”,但缺乏关于它的良好文档…. :(是的,我得到了它的工作,但我还不明白为什么失败,也没有为什么它的工作…只有一个地方来确认在networking中的URI,它被复制到client_secrets.json …我不明白如果有第三个地方应该写一个相同的URI .. 。我发现,也不仅仅是文档,而且还有Google的api的GUIdevise很蹩脚…

任何人都在努力find在新的控制台中设置redirectURL的位置:APIs&Auth – > Credentials – > OAuth 2.0客户端ID – >单击链接以查找所有redirectURL

Rails用户(来自omn​​iauth-google-oauth2文档):

修复协议与Rails中的redirect_uri不匹配

只需在Rails.env中设置OmniAuth中的full_host即可。

#config / initializers / omniauth.rb

OmniAuth.config.full_host = Rails.env.production? ? ' https : //domain.com ':' http:// localhost:3000 '

请记住:不要包含尾随的“/”

上述解决scheme都不适合我。 下面做了

将授权redirecturl更改为 – https:// localhost:44377 / signin-google

希望这有助于某人。

如果您使用本教程: https : //developers.google.com/identity/sign-in/web/server-side-flow,那么你应该使用“postmessage”。

在GO中解决了这个问题:

 confg = &oauth2.Config{ RedirectURL: "postmessage", ClientID: ..., ClientSecret: ..., Scopes: ..., Endpoint: google.Endpoint, } 

注意url / http://localhost:8000不同于http://localhost:8000/

尝试做这些检查:

  1. 控制台和应用程序中的软件包ID。 我更喜欢设置应用程序的Bundle ID,如“org.peredovik。$ {PRODUCT_NAME:rfc1034identifier}”
  2. 检查您是否在标签信息中添加了URLtypes,只需在标识符和URLscheme中input您的套件标识,angular色设置为编辑器
  3. 在控制台的cloud.google.com“APIs&auth” – >“同意屏幕”填写有关您的应用程序的表格。 “产品名称”是必填字段。

请享用 :)

在我的情况下,我不得不检查Web应用程序/安装的应用程序的客户端IDtypes。

已安装的应用程序: http:// localhost [redirectURI]在这种情况下,localhost只是起作用

networking应用程序:您需要有效的域名[redirectURI:]

您需要做的是返回到您的开发者控制台,并进入API&authentication>同意屏幕,并填写。 具体来说就是产品名称。

不要忘记包含你的域名和IP后的path。 就我而言,我忘记了:

/ oauth2callback

我在控制台中有两个请求URI, http:// xxxxx / client / api / spreadsheet / authredirect和http:// localhost 。

我尝试了所有这个问题的最高回应,并确认没有一个是我的问题。

我从控制台删除本地主机,更新我的client_secret.json在我的项目,失配错误消失。

我有谷歌login相同的问题,我正要拉我的头发! 我已经正确地进入我的callback在谷歌Credential面板在谷歌开发者控制台这里是我的redirecturl:

https://www.example.com/signin-google

https://www.example.com/signin-google/

https://www.example.com/oauth2callback

https://www.example.com/oauth2callback/

一切似乎都好吧? 但它仍然没有工作,直到我加了一个更神奇的url我添加了login谷歌url(这是默认谷歌callback) 没有 www和问题解决。

考虑到这一点(取决于你的域名),你可能需要也可能不需要添加或不添加wwwurl

已更新 – >为Android应用程序工作

只要使用:

HTTP://本地主机/ oauth2callback

如果你处理自己的逻辑没有Web应用程序的redirect链接