Google OAUTH:请求中的重定向URI与已注册的重定向URI不匹配。

77

我正在尝试从我的基于Java的Web应用程序上传到YouTube,我花了几天时间去理解问题所在,但一直无法解决。现在我非常焦急。

我在Google控制台中注册了我的Web应用程序,因此我得到了一对客户端ID和秘钥,并有可能下载JSON类型文件以获取我的配置。

以下是我的配置:

{
    "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呢?
请求中的重定向URI:http://localhost:8080/Callback与注册的重定向URI不匹配。
它总是给我默认的http://localhost:8080/Callback URL,而不是我的URL。
IDE控制台向我显示:
请在浏览器中打开以下地址: 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 现在尝试在默认浏览器中打开该地址...
我正在使用最新版本的依赖项: google-api-services-youtube v3-rev99-1.17.0-rc和google-api-services-youtubeAnalytics v1-rev35-1.17.0-rc。
5个回答

70

1
嗨@Multitut,这个对你有用吗?我遇到了以下错误:请求中的重定向URI与授权的OAuth URI不匹配。 - Yatin
嘿@Max,我已经按照你在Google开发者控制台中的步骤进行了操作。它起作用了。非常感谢你,伙计。 - Bunny Joel

48
当您的浏览器将用户重定向到Google的oAuth页面时,您是否将重定向URI作为参数传递,以便Google服务器返回带有令牌响应的重定向URI?在控制台中设置重定向URI不是告诉Google在登录尝试进来时去哪里的方法,而是告诉Google允许使用哪些重定向URI的方法(因此如果其他人使用您的客户端ID编写了Web应用程序,但使用不同的重定向URI,则会被禁止)。当某人点击“登录”按钮时,您的Web应用程序应将浏览器发送到:
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

(顺便提一下,传递的回调URI必须进行URL编码。)

当Google服务器获得用户授权时,它将重定向浏览器到您发送的redirect_uri。 它将在该请求中包含令牌作为参数,因此您的回调页面可以验证令牌,获取访问令牌,并继续使用应用程序的其他部分。

如果您访问:

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

您可以在那里看到更好的Java客户端示例,演示了您必须覆盖getRedirectUri方法来指定回调路径,以便不使用默认设置。

重定向URI在client_secrets.json文件中有多个原因...一个重要的原因是oAuth流程可以验证您的应用程序指定的重定向是否与您的应用程序允许的内容匹配。

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


2
从它的工作方式来看,似乎该库不会让我传递自定义URL,而是会传递标准URL,或者我做错了什么,或者我漏掉了一些细节。我以为它会从client_secret.json获取URI。那么配置文件有什么作用呢? - Denees
我编辑了上面的答案,为你的评论提供更多细节。 - jlmcdonald
谢谢Jarom,那就是问题所在,我没有覆盖方法,现在它可以工作了。非常感谢你,你节省了我的时间。 - Denees
@jlmcdonald,我遇到了类似的问题,你能帮我吗?http://stackoverflow.com/questions/34316162/installed-application-redirect-uri-mismatch-when-site-is-online - Prafulla Kumar Sahu
讲得很清楚,jlmcdonald。赞! - Hemant Nagpal

10
我已经成功地使用以下客户端凭据使我的工作: 授权的 JavaScript 来源 http://localhost 授权的重定向 URI http://localhost:8090/oauth2callback
注意:我使用的是 8090 端口,而不是 8080 端口,但只要您的 Python 脚本使用与 client_secret.json 文件相同的端口,那就无所谓了。
参考文献:Python 快速入门

2
很好,这很有帮助。我看到了错误信息中不允许的重定向URI地址,必须使用那个地址(显然 :)),但最终都解决了。 - Sheetal Kaul

4
你需要进入开发者控制台并设置。
http://localhost:8080/WEBAPP/youtube-callback.html

作为您的回调URL。 此视频略有过时,因为它显示旧的开发者控制台而不是新的控制台,但是概念仍然适用。您需要在开发者控制台中找到您的项目并注册回调URL

2
请仔细阅读我的帖子,我已经注册并下载了我的配置文件,在第一篇帖子中有配置文件,并且这里是从Google控制台获取的我的Web应用程序配置的截图 http://img89.imageshack.us/img89/5770/4p7q.png ,所以一切都似乎没问题,但它根本不工作。我尝试删除并重新创建了配置文件大约10次,甚至使用旧版Google控制台。我认为这可能与localhost有关,因此我甚至在生产环境中尝试如截图所示,但这也没有起作用。 - Denees
你需要在Web控制台中设置重定向URI,而不仅仅是在JSON配置文件中设置。 - Ikai Lan
我上面提供了一张截图,你看到了吗?那是来自Google控制台设置的截图。 - Denees

0

我以为我已经配置好了,但事实证明我把URL设置在了错误的位置。我按照Google错误页面提供的URL,在这里添加了我的URL。这是我犯的一个愚蠢的错误,但很容易犯。希望这可以帮到你。


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