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 omniauth-google-oauth2 。
redirectURI(返回响应的地址)必须在API控制台中注册,并且错误表明你没有这样做,或者没有正确完成。
转到您的项目的控制台,并在API访问下查找。 您应该在那里看到您的客户端ID和密码,以及redirectURI列表。 如果您所需的URI未列出,请单击编辑设置并将URI添加到列表中。
如果您使用的是Google+ javascriptbutton ,则必须使用postmessage
而不是实际的URI。 我花了几乎整整一天的时间才弄明白这一点,因为Google的文档由于某种原因没有明确说明。
在我的情况下,它是www
和non-www
URL。 实际网站具有www
url,Google Developer Console中的授权redirecturl具有non-www
url。 因此,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的人来说,这将是有帮助的。
select你的项目
- 点击菜单图标
- 点击
API Manager
菜单
- 点击
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
? -
&
或&
? - 尾部斜线(
/
)或打开?
-
(CMD/CTRL)+F
,search凭证页面中的完全匹配。 如果没有find,然后search丢失的一个。 - 等到谷歌刷新它。 如果你经常改变或者可能停留在游泳池里,可能会在每半小时发生一次。 对我来说,差不多半个小时才能生效。
就我而言,我的凭证申请types是“其他”。 所以我找不到凭证页面中的Authorized redirect URIs
。 它似乎出现在应用程序types:“Web应用程序”。 但是你可以点击Download JSON
button来获取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用户(来自omniauth-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/
尝试做这些检查:
- 控制台和应用程序中的软件包ID。 我更喜欢设置应用程序的Bundle ID,如“org.peredovik。$ {PRODUCT_NAME:rfc1034identifier}”
- 检查您是否在标签信息中添加了URLtypes,只需在标识符和URLscheme中input您的套件标识,angular色设置为编辑器
- 在控制台的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链接
- 使用Facebook进行身份validation的网站的REST API
- configurationSpring Security 3.x有多个入口点
- 在nonce电子邮件中激活/注册/密码重置链接的最佳做法是什么?
- “git push heroku master”仍然要求authentication
- 如何在UIWebView中显示身份validation挑战?
- HttpURLConnection在Android 2.x中工作正常,但在4.1中没有:没有发现身份validation的挑战
- 如果智威汤逊被盗?
- 在浏览器中存储JWT的位置? 如何防止CSRF?
- 是否有可能使用ASP.NET MVC创build一个login系统,但不使用MembershipProvider?