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

时间:2014-07-08 23:02:15

标签: 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

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。以下是我如何找到解决方案。

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

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

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

  

无法加载类型&System; Net.Net.HttpStatusCode&#39;从装配   &#39; System.Net,版本4.0.9.9,文化=中立,   公钥= b03f5f7f11d50a3a&#39;

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

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

我的结论是在执行 GoogleWebAuthorizationBroker.AuthorizeAsync 期间发生了同样的无法加载类型&System.SNet.HttpStatusCode&#39; 异常但是它没有被困和报道。

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 Update获取所有更新解决了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