Google OAUTH:请求中的redirectURI与注册的redirectURI不匹配

我正尝试从基于Java的networking应用程序上传到YouTube,我花了几天的时间来了解问题所在以及问题所在,我无法得到它,因为现在我正在将我的头发从头上拉开。

我在Google Console中注册了我的networking应用程序,所以我得到了一对客户端ID和秘密,并可以使用我的configuration下载JSONtypes的文件。

所以这里是configuration:

{ "web":{ "auth_uri":"https://accounts.google.com/o/oauth2/auth", "client_secret":"***", "token_uri":"https://accounts.google.com/o/oauth2/token", "client_email":"***", "redirect_uris":["http://localhost:8080/WEBAPP/youtube-callback.html","http://www.WEBAPP.md/youtube-callback.html"], "client_x509_cert_url":"***", "client_id":"***", "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs", "javascript_origins":["http://www.WEBAPP.md/"] } } 

我有可能获得Google的默认url吗?

The redirect URI in the request: http://localhost:8080/Callback did not match a registered redirect URI

它总是给我默认的http://localhost:8080/Callback URL而不是我的。

和IDE控制台显示我:

Please open the following address in your browser: https://accounts.google.com/o/oauth2/auth?client_id=***&redirect_uri=http://localhost:8080/Callback&response_type=code&scope=https://www.googleapis.com/auth/youtube.upload Attempting to open that address in the default browser now...

我正在使用最后一个版本的依赖项: google-api-services-youtube v3-rev99-1.17.0-rcgoogle-api-services-youtubeAnalytics v1-rev35-1.17.0-rc

当您的浏览器将用户redirect到Google的oAuth页面时,您是否通过parameter passing了您希望Google服务器使用令牌响应返回的redirectURI? 在控制台中设置一个redirectURI并不是告诉Google在login尝试进行的时候去哪里的方法,而是告诉Google允许的redirectURI是什么(所以如果别人用你的客户端写Web应用程序ID,但不同的redirectURI将被禁止); 您的networking应用程序应该在有人点击“login”button时将浏览器发送至:

 https://accounts.google.com/o/oauth2/auth?client_id=XXXXX&redirect_uri=http://localhost:8080/WEBAPP/youtube-callback.html&response_type=code&scope=https://www.googleapis.com/auth/youtube.upload 

(作为parameter passing的callbackURI必须是url编码的,顺便说一句)。

当Google的服务器获得用户的授权时,它会将浏览器redirect到redirect_uri发送的任何内容。 它会在该请求中包含令牌作为参数,因此您的callback页面可以validation令牌,获取访问令牌,然后转到应用程序的其他部分。

如果您访问:

http://code.google.com/p/google-api-java-client/wiki/OAuth2#Authorization_Code_Flow

您可以在那里看到更好的java客户端示例,certificate您必须重写getRedirectUri方法来指定callbackpath,以便不使用默认值。

由于多种原因,redirectURI位于client_secrets.json文件中,其中一个重要原因是,oAuthstream可以validation您的应用程序指定的redirect与您的应用程序允许的匹配。

如果您访问https://developers.google.com/api-client-library/java/apis/youtube/v3您可以为您自己生成一个示例应用程序,该应用程序直接基于您的应用程序在控制台中,其中(再次); getRedirectUri方法被覆盖,以使用您的特定callback。

我想我遇到了和你一样的问题。 我通过以下步骤解决了这个问题:

1)转到Google Developers Console

2)设置JavaScript的起源:

  • HTTP://本地主机

3)设置redirectURI:

  • HTTP://本地主机:8080

  • HTTP://本地主机:8080 /callback

您需要进入开发者控制台并设置

 http://localhost:8080/WEBAPP/youtube-callback.html 

作为您的回叫url。

这个video稍显过时,因为它显示的是旧版的开发者控制台而不是新版本,但是这些概念仍然适用。 您需要在开发人员控制台中find您的项目并注册一个callbackURL 。

我能够使用以下客户端证书来开展工作:

授权的JavaScript起源

http://localhost

授权redirectURI

http://localhost:8090/oauth2callback

注:我使用端口8090而不是8080,但只要您的python脚本使用与您的client_secret.json文件相同的端口即可。

参考: Python快速入门