google-apps-script - 数据洞察连接器无法获取 BigQuery 服务帐号的访问令牌:访问未授予或已过期
问题描述
我正在尝试创建一个社区连接器,以使用我作为 BigQuery 项目的所有者/数据查看器/作业用户连接的服务帐户将我在 BigQuery 中的数据库连接到数据工作室。我知道服务帐户在连接到 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 的文档,而且我无法理解为什么它不会终止。我可以看到它没有返回,因为在该行之前显示了一个 console.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 函数正确设置。
推荐阅读
- javascript - 角度应用中的行跨度
- html - 带有闪亮元素的 Rmarkdown - 在本地呈现 html 的问题
- msys2 - 如何修复 libtool:x86_64-pc-msys 共享中不允许未定义的符号
- swagger-2.0 - Swagger 文档:如何更新正文的内容
- git - 如何将本地文件夹上传到 bitbucket 中的现有存储库?
- r - ggannimate - 基于季度的过渡序列
- angular - *ngFor flexbox 行方向
- linux - 在 bash 脚本中使用 for 循环来迭代 csv 文件中保存的扩展,以从 NASA 下载数据
- visual-studio-code - 在 VSCode 中使用安装在 Windows Subsystem for Linux 中的 git
- git - 如何在 2 次提交之间找到添加的文件?