使用别人创建的API只能访问特定的人,无法访问googlesheet

问题描述 投票:0回答:1

我们的供应商维护着Googlesheet,我们正在尝试在我们的网站上添加一个表格来访问该表格并从中提取数据。非常简单的任务,但是我们在使用OAuth时遇到了麻烦。该工作表不是公开的,只能与某些人(包括我的Google ID)共享。

现在,我使用Google Developer Console来设置Googlesheets API库。我在这里添加了一个简单的表格:https://alcocovers.com/knowledge-base/track-your-order/。首次使用该表单时,我单击了“登录”按钮(当前处于隐藏状态),它在弹出窗口中显示了同意表单,我使用我的Google ID登录,并询问“ alcocovers.com希望访问我的个人资料信息”,我授予了访问权限。该表格开始工作,我可以从工作表中提取信息并显示在我们的网页上。

但是问题是,我链接网站以访问我的Google帐户(和Google工作表)所做的身份验证不适用于所有人。如果我以隐身模式使用表格,它将无法访问工作表,这意味着使用表格的每个人都必须表示同意。这是没有道理的,因为我认为当我第一次登录并授予网站访问我的帐户和工作表的权限时,它将对每个人都有效。这是使访问权不是个人用户的网站。我们希望我们站点的用户能够使用该表单并从表单中提取数据。我该如何实现?

下面是我用来初始化和验证客户端的代码。此代码是从Google Sheet API文档中复制粘贴的。我假设这需要更改,因此OAuth仅会发生一次,这已经完成了将站点链接到工作表的链接,并且在将来使用表格时,无需征得同意。

function initClient() {
    var API_KEY = '';  // I added api key here

    var CLIENT_ID = ''; // I added client id here  

    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) {
        makeApiCall();
    }
}

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

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

更新#1:在尝试了@Jescanellas建议的解决方案之后,我得到以下错误。注意,我保留了相同的API密钥,只是更改了CLIENT ID。enter image description here

javascript browser google-sheets-api
1个回答
1
投票

其他用户无法使用您的凭据访问工作表。为此,您需要使用Service Account。创建它之后,您可以使用服务帐户凭据(而不是您的凭据)来使用Domain-Wide Delegation使用您的Google帐户对API进行授权调用。请遵循文档中的步骤:

1-创建服务帐户和凭据

  1. 打开Service accounts page。如果出现提示,请选择一个项目。
  2. 单击添加创建服务帐户,输入名称和描述服务帐户。您可以使用默认的服务帐户ID,或者选择一个不同的,独特的。完成后,单击创建。
  3. 下面的服务帐户权限(可选)部分是不需要。单击继续。
  4. 在授予用户访问此服务帐户的屏幕上,滚动到“创建密钥”部分。单击添加创建密钥。
  5. 在出现的侧面板中,选择密钥的格式:JSON推荐。
  6. 单击创建。您的新公钥/私钥对已生成,并且下载到您的机器上;它是此密钥的唯一副本。有关如何安全存储的信息,请参见Managing service account keys
  7. 在保存到您的计算机对话框的私钥上单击“关闭”,然后单击完成以返回到服务帐户表。

2-启用G Suite域范围委派:

  1. 在表中找到新创建的服务帐户。下操作,单击more_vert,然后单击编辑。
  2. 在服务帐户详细信息中,单击expand_more显示整个域委派,然后确保启用G Suite域范围委派复选框被选中。
  3. [如果您尚未配置应用的OAuth同意屏幕,必须先这样做,然后才能启用域范围的委派。跟着屏幕上的说明,以配置OAuth同意屏幕,然后重复上述步骤,然后重新选中复选框。
  4. 单击保存以更新服务帐户,并返回到服务帐户。可以看到一个新列,即“域范围委托”。单击查看客户端ID,以获取并记录客户端ID。

如前所述,使用服务帐户凭据访问工作表。

© www.soinside.com 2019 - 2024. All rights reserved.