Youtube API V3 身份验证。上传到共享帐户
Youtube API V3 authentication. Uploading to shared account
我正在尝试使用 C# 更新现有 Asp.Net 应用程序以避免 Youtube V2 API 弃用。第一个挑战是弄清楚如何使用新的 API 进行身份验证。
这是应用程序当前的身份验证方式:
string developerKey = (My Developer Key here);
string username = (My username here);
string password = (My password here);
ytService = new YouTubeService("SampleApplication", developerKey);
ytService.setUserCredentials(username, password);
我研究并查看了 V3 API 示例,它们都使用 OAuth2 进行身份验证,如下所示:
UserCredential credential;
using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
// This OAuth 2.0 access scope allows an application to upload files to the
// authenticated user's YouTube channel, but doesn't allow other types of access.
new[] { YouTubeService.Scope.YoutubeUpload },
"user",
CancellationToken.None
);
}
但是,这会提示用户登录他们自己的 Google 帐户,对于此应用程序,我们希望所有上传的视频都进入我们的帐户。因此,如果可能的话,我想继续使用 Public API 访问权限,但我找不到 V3 API 的任何示例。
我也调查了 OAuth2 服务帐户,但我一直无法弄清楚如何使用其中之一进行身份验证。
你能帮我指明正确的方向吗?
很遗憾,YouTube API 的 V3 不支持服务帐户,oAuth2 是唯一的身份验证方法。
这背后的原因之一是避免将多个人上传到一个帐户;法律责任(对 YouTube 和应用开发者而言)太大了。当前唯一的替代方案是 YouTube direct lite 程序(它有多个客户端......请参阅 YouTube 的 Github 页面以找到它们),它为您提供了一个简单的 management/admin 窗格,用于根据用户上传自动生成播放列表将视频导入他们自己的帐户(换句话说,他们通过您的应用将视频上传到他们的帐户,但您的帐户会记录下来并管理can/can未出现在列表中的内容)。
我最近遇到了类似的问题,只是我使用的是共享 Google Calendar
而不是 Youtube
帐户。我最终做的是添加一个只有我能看到的 authorize
按钮,单击时该按钮连接到初始授权请求。它从 Google
打开弹出窗口,我从共享帐户授予权限,并将返回的访问令牌、刷新令牌和到期日期存储在数据库中。
然后,每当用户需要查看共享日历时,我的逻辑就是如果到期日期已过,使用存储的刷新令牌请求新的访问令牌并重置到期日期,然后我使用访问令牌以进行我的 Google Calendar
API 调用(在本例中获取事件列表)。
我正在尝试使用 C# 更新现有 Asp.Net 应用程序以避免 Youtube V2 API 弃用。第一个挑战是弄清楚如何使用新的 API 进行身份验证。
这是应用程序当前的身份验证方式:
string developerKey = (My Developer Key here);
string username = (My username here);
string password = (My password here);
ytService = new YouTubeService("SampleApplication", developerKey);
ytService.setUserCredentials(username, password);
我研究并查看了 V3 API 示例,它们都使用 OAuth2 进行身份验证,如下所示:
UserCredential credential;
using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
// This OAuth 2.0 access scope allows an application to upload files to the
// authenticated user's YouTube channel, but doesn't allow other types of access.
new[] { YouTubeService.Scope.YoutubeUpload },
"user",
CancellationToken.None
);
}
但是,这会提示用户登录他们自己的 Google 帐户,对于此应用程序,我们希望所有上传的视频都进入我们的帐户。因此,如果可能的话,我想继续使用 Public API 访问权限,但我找不到 V3 API 的任何示例。
我也调查了 OAuth2 服务帐户,但我一直无法弄清楚如何使用其中之一进行身份验证。
你能帮我指明正确的方向吗?
很遗憾,YouTube API 的 V3 不支持服务帐户,oAuth2 是唯一的身份验证方法。
这背后的原因之一是避免将多个人上传到一个帐户;法律责任(对 YouTube 和应用开发者而言)太大了。当前唯一的替代方案是 YouTube direct lite 程序(它有多个客户端......请参阅 YouTube 的 Github 页面以找到它们),它为您提供了一个简单的 management/admin 窗格,用于根据用户上传自动生成播放列表将视频导入他们自己的帐户(换句话说,他们通过您的应用将视频上传到他们的帐户,但您的帐户会记录下来并管理can/can未出现在列表中的内容)。
我最近遇到了类似的问题,只是我使用的是共享 Google Calendar
而不是 Youtube
帐户。我最终做的是添加一个只有我能看到的 authorize
按钮,单击时该按钮连接到初始授权请求。它从 Google
打开弹出窗口,我从共享帐户授予权限,并将返回的访问令牌、刷新令牌和到期日期存储在数据库中。
然后,每当用户需要查看共享日历时,我的逻辑就是如果到期日期已过,使用存储的刷新令牌请求新的访问令牌并重置到期日期,然后我使用访问令牌以进行我的 Google Calendar
API 调用(在本例中获取事件列表)。