我已成功使用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应用程序的用户授权将无法在第一时间使用。)
有什么我可以错过的吗?任何帮助将不胜感激。
答案 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索赔中设置为“子”的值 字段。