验证服务帐户以使用 JavaScript 客户端库调用 Google API

Ehs*_*ini 5 javascript oauth google-api google-api-js-client

我想使用适用于 JavaScriptGoogle 客户端库从本地主机(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客户端库>>示例

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

注意:我只愿意尝试 CORS/xhr,如果 JS 客户端库没有办法做到这一点。

DaI*_*mTo 7

这是怎么回事?

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

我如何让这个工作?

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