【问题标题】:authenticating a service account to call a Google API with JavaScript client library使用 JavaScript 客户端库验证服务帐户以调用 Google API
【发布时间】:2017-02-11 01:02:07
【问题描述】:

我想使用Google Client Library for JavaScript从本地主机(WAMP 环境)向Google FusionTables API(和其他几个 API)进行 JSON-RPC 调用

我采取的步骤:

  1. Google Developer Console 上设置项目
  2. 启用了 FusionTables API
  3. 创建了一个服务帐号并下载了 JSON 文件。
  4. 成功加载带有auth包的JS客户端库:gapi.load('client:auth2', initAuth);
  5. 通过以下3种方式构造init方法参数:
    • 逐字下载的 JSON
    • 已将下载的 JSON 修改为包含范围
    • 只是客户端 ID 和范围
  6. 尝试(但失败)初始化 GoogleAuth 实例:gapi.auth2.init(params)
功能失败(原因){ 控制台日志(原因); } gapi.load('client:auth2', initAuth); 函数 initAuth() { var APIkey = '我的 API 密钥'; gapi.client.setApiKey(APIkey); //我理解这对于授权请求是不必要的,只是为了很好的措施 var GDTSAKey = '我的服务帐户密钥'; var scopes = 'https://www.googleapis.com/auth/fusiontables'; gapi.auth2.init({ client_id: "101397488004556049686", 范围:'https://www.googleapis.com/auth/fusiontables' }).then(signin, failed("无法启动")); //将下载的JSON对象逐字作为参数传递给init也不起作用 } //initAuth() 函数登录(){ gapi.auth2.getAuthInstance().signIn().then(makeAPIcall), failed("无法登录"); } 函数 makeAPIcall(){ gapi.client.load('fusiontables', 'v2', function(){ var tableId = '1PSI_...'; var table = gapi.client.fusiontables.table.get(tableId); document.querySelector("#result").innerHTML = table; }); }

基于JS client library >> Samples

gapi.auth2.init 方法调用第二个回调(我理解它是一个错误处理程序):失败(“无法启动”),但奇怪的是,我也得到了“无法登录”,这可能仅源自提供的成功处理程序。这是怎么回事?我如何让它发挥作用?

注意:我只愿意尝试 CORS/xhr,如果没有办法用 JS 客户端库来做的话。

【问题讨论】:

  • Google JavaScript 客户端库的文档中哪里说它支持服务帐户?我看到的只是公共 API 和 Oauth2。
  • 我不记得曾明确看过它。但是后来,我没有读到它没有读到的任何地方,所以我只是假设它读到了;真可惜它没有。
  • 如果支持某些内容,文档将说明这一点并向您展示如何使用它。否则,我们将必须有文件明确说明它不能帮助您制作比萨饼、煮热狗……或世界上任何其他它不支持的东西。
  • 我的假设是基于此页面上的建议:OAuth 2.0 for Service Accounts。人们不会合理地期望客户端库直接帮助您制作比萨饼或烹饪热狗。但是,我认为期望 Google API 客户端库与 Google 的所有帐户类型兼容并不是太牵强,而且很自然地假设,除非它被明确排除。虽然这是一项伟大的工作并且非常感谢,但如果不是完全误导的话,文档也是模棱两可的。
  • 考虑到 js 是客户端的,然后考虑在文件中包含服务帐户信息以供所有人查看和下载的安全后果。服务帐户和 js 不混合。 Google 不会帮助您做会成为安全噩梦的事情

标签: javascript oauth google-api google-api-js-client


【解决方案1】:

发生了什么事?

您正在尝试将服务帐户与不支持服务帐户的 Google JavaScript 客户端库一起使用。

如何让它工作?

切换到 Oauth2 身份验证,或者如果您必须使用服务帐户切换到服务器端语言,例如 PHP 或 python。其中支持服务帐户身份验证。

【讨论】:

  • 我的初衷是将 FusionTables 用作轻量级数据库,为部署为任何人(甚至匿名)都可以访问的 Web 应用程序的独立 GAS 提供动力。为了减少延迟,我决定从客户端(HTMLService)发出请求。当我遇到 JS 客户端库时,我试图弄清楚如何去做,虽然它明确表示不支持像 iframe 这样的沙箱环境(我想这排除了我原来的环境),但我决定尝试一下有点学习在其他项目中使用它。那么你建议我如何解决最初的问题?
  • 我认为您应该针对原始问题提出另一个问题。试着指出你尝试过的和没有奏效的。
猜你喜欢
  • 2019-01-10
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
  • 1970-01-01
  • 2010-09-14
相关资源
最近更新 更多