Google Sheets API v4 с аутентификацией сервера oAuth 2.0 на сервере с использованием служебной учетной записи в javascript - PullRequest
1 голос
/ 13 июня 2019

Я искал везде и не могу найти пример для подражания.

У меня есть личный гугл лист. Я использую данные из листа Google, чтобы заполнить различные диаграммы с помощью API визуализации Google на простой веб-странице с использованием JavaScript.

В настоящее время каждый пользователь должен авторизоваться (через поток oauth) для просмотра данных в диаграммах. Пользователи смотрят только на графики, но не изменяют их, поэтому у моего веб-приложения нет причин иметь доступ к каждой учетной записи Google пользователя.

Я бы хотел исключить часть проверки подлинности пользователя и вместо этого предоставить серверу авторизацию для аутентификации с помощью личного листа Google через учетную запись службы Google и сервер-сервер Oauth, сохраняя при этом фактическую электронную таблицу в секрете.

Шаги, которые я предпринял: Я создал учетную запись службы в консоли разработчиков Google Сохранен файл .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();

          });
          }
...