用于YouTube API上传的非交互式OAuth

时间:2013-05-28 19:53:35

标签: c# youtube-api google-oauth

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

  1. 无法使用简单API访问来上传视频。

  2. 对于OAuth,无法使用“使用服务帐户代表您的应用程序而非最终用户来调用Google API。”正如Justin Smith's Blog post.中所述,这本来是我想要的解决方案。这是我尝试使用的代码。它执行,但总是返回“未授权”(401):

    public async Task AnnounceAsync(Recording recording)
    {
        const string emailAddress =
            "xxxxxxx.gserviceaccount.com";
    
        const string keyFile = @"C:\Temp\xxxxxxx-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());
        }
    }
    
  3. 所以,我已经得出结论,我需要使用“已安装的应用程序”API访问方法,至少在我自己的情况下以交互方式遍历OAuth登录过程,保存刷新令牌,然后在将来使用该刷新令牌获取新内容访问令牌?我知道我可以做这个工作,但看起来很尴尬。如果我沿着这条路走下去,是否有任何问题需要注意?

    进一步的问题:

    1. 计划允许服务帐户OAuth与YouTube API一起使用的任何未来支持?
    2. 我的程序可以使用“移动上传”功能将email videos添加到其YouTube帐户吗?
    3. 提前感谢您的意见。

2 个答案:

答案 0 :(得分:1)

目前您无法使用服务帐户。来自doc:

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

错误/非授权/ youtubeSignupRequired

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

YouTube API博文:

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

介绍Google帐户支持还会更详细地讨论youtubeSignupRequired错误。虽然博客文章解释了API 2.1版的错误,但错误的含义仍然适用。

&#34;移动上传&#34;电子邮件视频的功能似乎有效

答案 1 :(得分:0)

服务帐户是一个不断变化的目标。但你是对的,如果你能获得刷新令牌,那么你应该好好去。