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

我正在尝试从基于Java的Web应用程序上传到YouTube,我花了几天时间了解问题是什么以及在哪里,我无法理解它,因为现在我正在从头上拉出头发。

我在Google控制台中注册了我的网络应用程序,因此我获得了一对客户端ID和Secret,并且可以使用我的配置下载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 获取默认网址?

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

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

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


答案 1

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

1)转到谷歌开发人员控制台

2) 设置 JavaScript 起源:

3) 设置重定向 URI:


答案 2

当您的浏览器将用户重定向到Google的oAuth页面时,您是否将您希望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 由于多种原因而位于文件中...一个重要的问题是,oAuth 流可以验证应用指定的重定向是否与应用允许的内容匹配。client_secrets.json

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