redirect_uri_mismatch 当从 Google / Youtube OAuth API 请求离线令牌时

redirect_uri_mismatch when request an offline token from Google / Youtube OAuth API

嗨,

我想做什么

我需要获取访问令牌(带有刷新令牌)才能将视频上传到我的用户 YouTube 帐户。

什么不起作用

当我通过 Google API 请求令牌时,它在 localhost 中工作但不在生产中。在生产环境中,当我将用户重定向到 Google 的 OAuth 服务器时出现 redirect_uri_mismatch 错误。

我是怎么做到的

我在 Google API 控制台中创建了一个控制台令牌,因为我需要检索一个离线令牌(如果我在 Google API 控制台).

在我的代码中:我使用这个 url 将用户重定向到 Google 的 OAuth 服务器:

https://accounts.google.com/o/oauth2/auth?client_id=XXXXXX.apps.googleusercontent.com&redirect_uri=MyRedirectUri&scope=https://www.googleapis.com/auth/youtube.readonly&response_type=code&access_type=offline

为了让事情更容易阅读:

在开发中,它正在运行。在生产中,它不起作用 (redirect_uri_mismatch)

我也试过像the answer of this post说的那样把redirect_uri改成urn:ietf:wg:oauth:2.0:oob。但它只是打开一个页面,其中包含要复制/粘贴的代码。

PS :我注意到当我从 Google 控制台 API 下载我的 "client_secrets.json" 时,有一个 redirect_uris 在具有这些值的下载文件中:["urn:ietf:wg:oauth:2.0:oob","http://localhost"]。但是在 Google API 控制台我不能修改这个参数。

PS2 :我不使用 .NET API 来请求令牌,因为 as the answer to this post say (正如我之前尝试的那样) ,无法使用 .NET API 获取离线令牌。

感谢您的帮助

编辑 1: This post 不回答我的问题,因为他使用 "Web application token" 来进行一次性请求。就我而言,我在无法设置重定向的地方使用 "Console token"(在 Google API 控制台中称为 "Other")。我使用 "Console token" 获取离线令牌。

在开发控制台中,您应该使用 "web application token",这样您就可以将 http://xxxxxx.azurewebsites.net/Account/Oauth 指定为重定向 URL 之一。另请注意,不鼓励使用明文 URL,因此理想情况下您应该提供 https://xxxxxx.azurewebsites.net/Account/Oauth。在开发控制台中,您可以添加多个 URL,因此我建议同时添加 http 和 https 版本。

只需添加这个

app.Use((context, next) =>
       {
        context.Request.Scheme = "https";
        return next();
       });

在您的 class (Startup.cs) 启动时 "Configure" 方法下。