数据洞察连接器无法获取 BigQuery 服务帐户的访问令牌:访问权限未授予或已过期



我正在尝试创建一个社区连接器,以将我在 BigQuery 中的数据库连接到数据工作室,并使用我作为 BigQuery 项目的所有者/DataViewer/JobUser 挂接的服务帐户。 我知道服务帐户在连接到 BigQuery 时有效,因为我已经在其他地方对其进行了测试。 我几乎完全复制了本教程 (https://developers.google.com/datastudio/solution/blocks/using-service-accounts) 中的连接器代码,用我的查询替换了 SQL 字符串并添加了一些不同的查询参数。 我还通过粘贴 json 对象并将其存储为,将服务帐户的凭据存储在脚本属性中

,如下所示:
var service_account_creds_obj = {
"type": "service_account",
"project_id": ...
...
}
scriptProperties.setProperty('SERVICE_ACCOUNT_CREDS', JSON.stringify(service_account_creds_obj));

但是,当我的 getData 函数调用getOauthService().getAccessToken()时,我总是卡在流程中,这永远不会成功返回。 使用连接器创建报表时,出现此错误:"访问权限未授予或已过期。 我找不到getAccessToken的文档,并且无法理解为什么它不会终止。 我可以看到它没有返回,因为控制台.log紧接着该行显示,但它永远不会到达下一行的日志。然后我的 try-catch 块捕获我看到的错误。 请注意,我的 getOauthService 函数与文档/教程示例中的函数完全相同,只是我在调用 createService 时使用了输入文本。 输入文本应该并不重要,对吗?

拜托,我已经尝试调试了几个小时,但是关于此的文档非常糟糕,而且很难调试,因为代码流是在后台处理的,并且堆栈驱动程序日志记录确实存在错误。

我想出了我的问题。 上面发布的文档说将OAuth2范围设置为 https://www.googleapis.com/auth/bigquery.readonly。 但是,我天真地包括

"oauthScopes": ["https://www.googleapis.com/auth/bigquery.readonly"]

在我的清单文件中。 同时,我从文档中复制的代码已经包含以下行:

.setScope(['https://www.googleapis.com/auth/bigquery.readonly']);

所以我不确定为什么这会导致问题。 但它一定阻止了OAuth2.createService函数的正确设置。

最新更新