我使用Youtube Data API V3通过Oauth 2.0身份验证将视频上传到我的Youtube帐户。
UserCredential credential;
using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { YouTubeService.Scope.YoutubeUpload },
"user",
CancellationToken.None
);
}
var youtubeService = new YouTubeService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = Assembly.GetExecutingAssembly().GetName().Name
});
在认证过程中,它会显示登录和同意屏幕以获得授权,如所示
Oauth_UserConsent
我需要克服以上问题,这样在没有用户同意的情况下,我希望youtube数据API V3使用OAuth 2.0进行身份验证,并将视频上传到我的帐户。
因此,我发现"服务帐户"可用于此类场景,但再次发现服务帐户不适用于Youtube数据API,因为服务帐户需要关联的Youtube频道,并且无法将新频道或现有频道与链接的服务帐户相关联https://developers.google.com/youtube/v3/guides/moving_to_oauth在dotnet中有没有其他方法可以跳过用户同意,通过编程方式进行身份验证,并通过编程方式将视频上传到我的帐户
这只是用户第一次验证他必须接受条款(允许您的应用程序访问他的资源…)。从那时起,库将存储访问和刷新令牌。访问令牌的有效期为60分钟,当它过期时,库将使用刷新令牌刷新访问令牌并获取有效令牌。
如果您根本不想获得用户同意,则应使用ServiceAccount流,如中所述https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#service-账户
V3 更新
请参阅此处的SO答案,了解如何使用.NET web示例。对我来说,与谷歌提供的命令提示符示例相比,最大的变化是从GoogleWebAuthorizationBroker.AuthorizeAsync()
到GoogleAuthorizationCodeFlow
获取凭据的变化(有关详细信息,请参阅链接答案)
您需要获得一个刷新令牌,并将其与OAuth-Key和Secret一起存储在代码中。
更新:我已经想出了自己的解决方案来做到这一点。我使用.NET进行HTTP/REST调用以获取access_token,然后将其传递给JavaScript以执行实际上传,从而为您提供进度指示的优势。
请在此处查看我的答案/解决方案https://stackoverflow.com/a/49516167/3790921