使用 javascript 中的服务帐户使用 oAuth 2.0 服务器到服务器身份验证的 Google Sheets API v4

Hea*_*ath 6 javascript google-api oauth-2.0 google-oauth google-sheets-api

我到处搜索,找不到可以遵循的示例。

我有一个私人谷歌表。我使用 google 表格中的数据在使用 javascript 的简单网页上使用 Google Visualization API 填充各种图表。

目前,每个用户都必须授权(通过 oauth 流程)才能查看图表中的数据。用户只查看图表,不会修改它们,因此我的网络应用程序没有理由访问每个用户的 Google 帐户。

我想消除用户身份验证部分,而是授权服务器通过谷歌服务帐户和服务器到服务器 Oauth 对私人谷歌工作表进行身份验证,同时保持实际电子表格的私密性。

我采取的步骤:我在 Google Developers Console 中创建了一个服务帐户,使用私钥、公钥、id 等保存了 .json 文件。

我尝试按照此处概述的步骤进行操作但没有使用 javascript 的示例。我也不确定为什么代码会公开包含私钥的 p12 文件。

通过 oAuth 流程授权用户访问电子表格的示例非常简单,这就是我所做的:

function initClient() {
    var API_KEY = 'myapikey';

    var CLIENT_ID = 'myid'; 
    var SCOPE = 'https://www.googleapis.com/auth/spreadsheets.readonly';
    gapi.client.init({
        'apiKey': API_KEY,
        'clientId': CLIENT_ID,
        'scope': SCOPE,
        'discoveryDocs': ['https://sheets.googleapis.com/$discovery/rest?version=v4'],
    }).then(function() {
        gapi.auth2.getAuthInstance().isSignedIn.listen(updateSignInStatus);
        updateSignInStatus(gapi.auth2.getAuthInstance().isSignedIn.get());
    });
}

function handleClientLoad() {
    gapi.load('client:auth2', initClient);
   }

function updateSignInStatus(isSignedIn) {
    if (isSignedIn) {
   //do stuff
    drawGID()
    }
    else{

    }
}

function handleSignInClick(event) {
    gapi.auth2.getAuthInstance().signIn();
}

function handleSignOutClick(event) {
    gapi.auth2.getAuthInstance().signOut();
}

//draw all the charts
function drawGID() {
        var params = { 
            valueRenderOption: "FORMATTED_VALUE",
            spreadsheetId: 'myspreadsheetID',
            range: 'MySpreadsheetRange!A:AX', 
        };
        var request = gapi.client.sheets.spreadsheets.values.get(params);
        request.then(function(response) {
            //do various stuff with the data from response
            var dataTable = response.getDataTable();

          });
          }
Run Code Online (Sandbox Code Playgroud)