GoogleWebAuthorizationBroker.AuthorizeAsync冻结

时间:2015-08-23 16:56:14

标签: c# oauth-2.0 google-api youtube-api google-api-dotnet-client

我有一个C#.net网络应用程序,用于将视频上传到Youtube。这工作大约6个月前,但现在已停止工作。当我在本地计算机上通过Visual Studio启动我的网站时,以下代码就会挂起:

     UserCredential credential;
    using (var auth_stream = new FileStream(Server.MapPath("~/YouTube/client_secrets.json"), FileMode.Open, FileAccess.Read))
    {
        credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
            GoogleClientSecrets.Load(auth_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
        );
    }

在查看堆栈溢出的其他帖子后,我也尝试了以下内容:

     UserCredential credentialS;
     using (var auth_stream = new FileStream(Server.MapPath("~/YouTube/client_secrets.json"), FileMode.Open, FileAccess.Read))
     {
         credentialS = await GoogleWebAuthorizationBroker.AuthorizeAsync(
             new ClientSecrets
             {
                 ClientId = "blahblah-myDetailsBlahBLah.apps.googleusercontent.com",
                 ClientSecret = "myClientSecret",
             },
             // 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 API 1.7.0-beta版,因此我通过PackageManager控制台升级到版本1.8.2。

我还通过Google Developer Console生成了一个新的客户端密钥,并在我的网站中使用了它。

但在尝试这些步骤后,对 GoogleWebAuthorizationBroker.AuthorizeAsync 的调用仍然会挂起。 我注意到我的本地浏览器中的网站刷新,好像它试图连接但是电话永远不会成功。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我也使用Google Calendar API遇到了这个问题。

我的应用程序正在从各种在线资源中删除通知,并将其发布到共享的Google日历。

它在开发环境中运行良好,但在我使用该VM中的服务帐户将其作为Windows计划任务每​​15分钟运行一次的VM时没有。

我记得在第一次设置时我必须通过浏览器中的授权步骤,但在作为计划任务运行时它不会被触发。

我找不到让它通过浏览器再次授予访问权限的方法。

由于服务帐户C:\ Users \\ Documents.credentials \ calendar-dotnet-quickstart文件夹创建得很好,我只是从同一文件夹中复制了Google.Apis.Auth.OAuth2.Responses.TokenResponse-user在我的开发环境中它现在运行正常。

这可能不是最好或最终的解决方案,但它确实有效。

我怀疑如果我以该服务用户身份登录计划任务并从命令提示符运行,我会通过浏览器提示授予该授权。

希望这有助于某人。