YouTube API上传的非交互式OAuth



我想使用YouTube API将视频上传到非交互式程序中的企业帐户。我试图在没有提示身份验证和授权的情况下实现上传(因为没有交互式用户)。如果有人能验证以下断言,我将不胜感激:

  1. 无法使用Simple API Access上传视频

  2. 对于OAuth,不可能使用"使用服务帐户代表您的应用程序而不是最终用户调用Google api。"正如Justin Smith的博客文章所描述的那样。这就是我想要的解。这是我试图做到这一点的代码。它执行,但总是返回为"unauthorized" (401):

    public async Task AnnounceAsync(Recording recording)
    {
        const string emailAddress =
            "xxxxxxx.gserviceaccount.com";
        const string keyFile = @"C:Tempxxxxxxx-privatekey.p12";
        var key = new X509Certificate2(keyFile, "notasecret", X509KeyStorageFlags.Exportable);
        var client = new AssertionFlowClient(GoogleAuthenticationServer.Description, key)
                            {
                                ServiceAccountId = emailAddress,
                                Scope = YoutubeService.Scopes.Youtube.GetStringValue()
                            };
        var auth = new OAuth2Authenticator<AssertionFlowClient>(client, AssertionFlowClient.GetState);
        var youtube = new YoutubeService(new BaseClientService.Initializer {Authenticator = auth});
        var video = new Video
                {
    
                    Snippet = new VideoSnippet
                                    {
                                        Title = recording.Title,
                                        Description = recording.Description,
                                        CategoryId = "22"
                                    },
                    Status = new VideoStatus
                                    {
                                        PrivacyStatus = "public",
                                    }
                };
        using (var fileStream = new FileStream(recording.Path, FileMode.Open))
        {
            var videosInsertRequest = youtube.Videos.Insert(video, "snippet,status", fileStream, "video/*");
            videosInsertRequest.ProgressChanged += videosInsertRequest_ProgressChanged;
            videosInsertRequest.ResponseReceived += videosInsertRequest_ResponseReceived;
            await Task.Run(() => videosInsertRequest.Upload());
        }
    }
    

所以,我得出的结论是,我需要使用"已安装的应用程序"API访问方法来交互式地通过OAuth登录过程至少一次,保存刷新令牌,然后在将来使用刷新令牌来获得新的访问令牌?我知道我能解决这个问题,但这看起来很尴尬。如果我沿着这条路走下去,有什么需要注意的吗?

进一步问题:

  1. 未来是否计划允许服务帐户OAuth与YouTube API一起使用?
  2. 我的程序可以使用"移动上传"功能将视频通过电子邮件发送到其YouTube帐户吗?

提前感谢您的输入

目前您不能使用服务帐户。来自文档:

https://developers.google.com/youtube/v3/docs/errors

错误/授权/youtubeSignupRequired

如果您尝试使用OAuth 2.0服务帐户流程,通常会出现此错误。YouTube不支持服务帐户,如果您尝试使用服务帐户进行身份验证,您将得到此错误。

YouTube API blog post:

http://apiblog.youtube.com/2011/10/introducing-google-account-support-and.html

介绍谷歌帐户支持也讨论了更详细的youtubesignurequired错误。虽然这篇博文解释了API 2.1版本的错误,但错误的含义仍然适用。

电子邮件视频的"移动上传"功能似乎起作用了

服务帐户是一个移动的目标。但你是正确的,如果你能得到一个刷新令牌,那么你应该很好。

相关内容

  • 没有找到相关文章

最新更新