redirect_uri_mismatch 当从 Google / Youtube OAuth API 请求离线令牌时
redirect_uri_mismatch when request an offline token from Google / Youtube OAuth API
- 语言:C#
- 框架:.NET 核心 1.1.1
- Nuget:Google.Apis.YouTube.v3 1.25.0.760 和 Google.Apis 1.25.0
嗨,
我想做什么
我需要获取访问令牌(带有刷新令牌)才能将视频上传到我的用户 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
为了让事情更容易阅读:
- 基础 URL : https://accounts.google.com/o/oauth2/auth
- client_id : 我的客户端 ID
- redirect_uri : http://localhost:43443/Account/Oauth (dév) and http://xxxxxx.azurewebsites.net/Account/Oauth (产品)
- 范围:https://www.googleapis.com/auth/youtube.readonly
- response_type:代码
- access_type : 离线
在开发中,它正在运行。在生产中,它不起作用 (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" 方法下。
- 语言:C#
- 框架:.NET 核心 1.1.1
- Nuget:Google.Apis.YouTube.v3 1.25.0.760 和 Google.Apis 1.25.0
嗨,
我想做什么
我需要获取访问令牌(带有刷新令牌)才能将视频上传到我的用户 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
为了让事情更容易阅读:
- 基础 URL : https://accounts.google.com/o/oauth2/auth
- client_id : 我的客户端 ID
- redirect_uri : http://localhost:43443/Account/Oauth (dév) and http://xxxxxx.azurewebsites.net/Account/Oauth (产品)
- 范围:https://www.googleapis.com/auth/youtube.readonly
- response_type:代码
- access_type : 离线
在开发中,它正在运行。在生产中,它不起作用 (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" 方法下。