Google API V3 OAUTH2 挂起 - 未创建 TokenResponse-user 凭据文件

Posted

技术标签:

【中文标题】Google API V3 OAUTH2 挂起 - 未创建 TokenResponse-user 凭据文件【英文标题】:Google API V3 OAUTH2 Hang - TokenResponse-user Credentials File not created 【发布时间】:2014-08-29 20:11:21 【问题描述】:

Google API V3 OAUTH2 问题报告

下面的 GoogleWebAuthorizationBroker.AuthorizeAsync 代码在我的 Windows 8.1 上运行良好。当我在我的 Windows 7 PC 上安装并运行 EXE 时,AuthorizeAsync 被执行,浏览器打开,我点击 Select an account pageThis应用程序想要: 页面,然后在短时间内看到一个显示收到验证码的页面。正在关闭... ..\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

【问题讨论】:

你有例外吗? 蒂姆,不会抛出异常。我的 EXE 在调用 GoogleWebAuthorizationBroker.AuthorizeAsync 之后永远等待。 【参考方案1】:

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

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

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

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

无法从程序集中加载类型“System.Net.HttpStatusCode” 'System.Net,版本 4.0.9.9,文化=中性, PublicKeyToken=b03f5f7f11d50a3a'。

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

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

我的结论是同样的Could not load type 'System.Net.HttpStatusCode'异常发生在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)

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

更多信息

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

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

【讨论】:

感谢分享!我在我们的问题跟踪器中添加了一个新问题 - code.google.com/p/google-api-dotnet-client/issues/detail?id=476。随意添加更多数据。再次感谢。

以上是关于Google API V3 OAUTH2 挂起 - 未创建 TokenResponse-user 凭据文件的主要内容,如果未能解决你的问题,请参考以下文章

带有 Google Analytics API v3 的 OAuth 2.0

带有 OAuth2 的 YouTube API v3:更新和删除失败并出现“权限不足”错误

Google Contacts API v3:如何使用全文查询?

Google API V 3.0 .Net 库和 Google OAuth2 如何处理刷新令牌

使用服务帐户通过 OAuth 2.0 调用 v3 Google 日历 API 时出现“需要登录”401 未经授权的消息

YouTube api v3 调试 oauth2 访问令牌