无法使用Google服务帐户请求Fusion Tables API的访问令牌

时间:2015-08-20 08:35:26

标签: google-fusion-tables google-oauth2 service-accounts

我已成功使用Google API(通过HTTP / REST,以及使用.NET客户端库)和Google服务帐户访问Google云端硬盘中的文件。

最近,我正在探索Fusion Tables。我可以通过Web应用程序使用API​​和用户授权。但是,当我尝试使用同一项目下的Google服务帐户访问它时,只要我在范围内 https://www.googleapis.com/auth/fusiontables ,就会出现以下错误:

  

https:// www.googleapis.com/oauth2/v3/token

  HTTP 401

  {"错误":" unauthorized_client"," error_description":"请求中未经授权的客户端或范围。" }

当我删除https:// www.googleapis.com/auth/fusiontables并且相同的代码块与https://www.googleapis.com/auth/drive和其他范围一起使用时,错误就消失了。

我已经检查并确认了#34; Fusion Tables API"已在Google Developers Console中为我的项目启用。 (否则,我通过Web应用程序的用户授权将无法在第一时间使用。)

有什么我可以错过的吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我刚碰到过这个: Google drive service account and "Unauthorized client or scope in request"

即使乍一看似乎没有相关性,但确实是同样的问题。

从以下代码块中删除User = svcAcct,后问题已解决。

  ServiceAccountCredential credential;
  credential = new ServiceAccountCredential(
    new ServiceAccountCredential.Initializer(svcAcct) {
      // User = svcAcct, *** removed ***
      Scopes = new System.Collections.Generic.List<string>(scopes.Split(' '))
    }.FromCertificate(certificate)
  );

因此,这里是一般建议:

  

请勿使用 User = svcAcct 不必要地调用 ServiceAccountCredential.Initializer

     

仅在尝试模拟差异用户时才执行此操作   (条件是已正确完成相应的设置   在Google Apps管理控制台中)。

     

即使在某些情况下它可能不会产生任何错误   包含电子邮件地址时出现的一些意外行为   服务帐户本身在JWT索赔中设置为“子”的值   字段。