youtube-api - Google API V3 OAUTH2 挂起 - 未创建 TokenResponse 用户凭据文件

标签 youtube-api google-oauth google-api-dotnet-client

Google API V3 OAUTH2 问题报告

下面的 GoogleWebAuthorizationBroker.AuthorizeAsync 代码在我的 Windows 8.1 上运行良好。当我在我的 Windows 7 PC 上安装并运行 EXE 时,AuthorizeAsync 被执行,浏览器打开,我点击选择一个帐户页面这个应用想要: 页面,然后在短时间内看到一个页面,上面写着 已收到验证码。正在关闭... ..\AppData\Roaming\Google.Apis.Auth 文件夹中没有保存 TokenResponse-user 文件,我的 EXE 挂起(永远等待)。我已尝试使用 Chrome 和 Internet Explorer 浏览器。

在 Windows 8.1 PC 上运行良好,但在 Windows 7 PC 上挂起。我尝试了两台不同的 Windows 7 PC。所有 PC 上都使用了相同的客户端 ID/密码和相同的 Google 用户名/密码。

我应该在我的代码中做一些不同的事情吗?或者这是 Google API V3 客户端库的问题吗?

Private Async Function GetGredentials() As Task
        OAUth2Credential = Await GoogleWebAuthorizationBroker.AuthorizeAsync( _
                New ClientSecrets With {.ClientId = Google_ClientID, .ClientSecret = Google_ClientSecret}, _
                {YouTubeService.Scope.Youtube}, "user", CancellationToken.None)
End Function

我电脑上的版本:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Google.Apis" version="1.8.2" targetFramework="net40" />
  <package id="Google.Apis.Auth" version="1.8.2" targetFramework="net40" />
  <package id="Google.Apis.Core" version="1.8.2" targetFramework="net40" />
  <package id="Google.Apis.YouTube.v3" version="1.8.1.1080" targetFramework="net40" />
  <package id="log4net" version="2.0.3" targetFramework="net40" />
  <package id="Microsoft.Bcl" version="1.1.9" targetFramework="net40" />
  <package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net40" />
  <package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net40" />
  <package id="Microsoft.Net.Http" version="2.2.22" targetFramework="net40" />
  <package id="Newtonsoft.Json" version="6.0.3" targetFramework="net40" />
  <package id="Zlib.Portable" version="1.10.0" targetFramework="net40" />
</packages>

Chrome 历史记录显示了这一点,但 Google.Apis.Auth 文件夹中没有文件:

9:50 AM OAuth 2.0 Authentication Token Received localhost
9:50 AM Request for Permission accounts.google.com

最佳答案

我找到了解决办法。以下是我得出解决方案的方法。

我决定尝试将 Google.Apis.Auth.OAuth2.Responses.TokenResponse-user 从我的 Windows 8.1 PC 复制到我的 Windows 7 PC,看看刷新 token 文件是否可行因为第一次创建 token 文件不起作用。刷新确实有效。 GoogleWebAuthorizationBroker.AuthorizeAsync 刷新了 token 文件并正确退出回到我的 EXE 程序。

但是,另一个问题浮出水面。

在我的 EXE 程序的下一步中,在执行 ChannelsResource.ListRequest 时,我收到了这个错误消息框:

Could not load type 'System.Net.HttpStatusCode' from assembly 'System.Net, Version 4.0.9.9, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

搜索显示其他人也看到了同样的错误,并被建议安装 Microsoft .NET Framework 4.0 更新 KB2468871。我这样做了,现在我的 ChannelsResource.ListRequest 正确执行了。

我删除了 Google.Apis.Auth.OAuth2.Responses.TokenResponse-user token 文件并重新运行我的 EXE 程序执行 GoogleWebAuthorizationBroker.AuthorizeAsync 以创建一个新的 token 文件。这次它工作正常。

我的结论是同样的 Could not load type 'System.Net.HttpStatusCode' exception occurred during the execution of GoogleWebAuthorizationBroker.AuthorizeAsync 但它没有被捕获和报告.

Google API V3 文档

应将以下先决条件要求添加到 Google API V3 文档中:

安装 Microsoft .NET Framework 4.0 更新 KB2468871 ( http://www.microsoft.com/en-us/download/details.aspx?id=3556 )

N.B. 后来,在遇到另一个问题后,我发现 Windows 7 PC 没有从 Windows Update 获得所有最新更新。使用 Windows 更新获取所有更新解决了 System.InvalidOperationException in MSCORLIB when Google API V3 .UploadAsync is called 中记录的问题

更多信息

我必须手动将以下从 NuGet 安装在项目文件夹中的文件添加到 InstallShield LE 安装项目的 文件 选项卡中,以便将它们复制到目标系统。由于某种原因,InstallShield LE 安装项目没有自动添加这些文件。它添加了所有其他的。

System.Net.Http.dll
System.Net.Http.WebRequest.dll
System.Runtime.dll
System.Threading.Tasks.dll

关于youtube-api - Google API V3 OAUTH2 挂起 - 未创建 TokenResponse 用户凭据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24642877/

相关文章:

google-apps-script - YouTube API v3 - 确定用户是否观看了视频?

javascript - 使用 JS 模块模式在回调函数中设置变量

youtube - Youtube Player API:视频结束时隐藏控件并显示最后一帧

android - 如何使用 GoogleApiClient 为云端点客户端提供凭据

java - google-oauth-java-client - 强制访问 token 默认生命周期

c# - YouTube-API 上传文件没有任何错误(C#)

youtube - 提取私有(private) youtube 播放列表视频链接

node.js - 如何安全地将 Google OAuth 生成的访问 token 传递到 NodeJS REST API?

c# - 如何使用适用于 .NET 的 Google 客户端 API 获取已解码的 Play Integrity API token

c# - 无法创建 Google.Apis.Services.BaseClientService 的实例