You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Observablehq Notebook连接需身份验证的Google Apps Script Web应用

在Observablehq Notebook中授权访问需身份验证的Google Apps Script Web应用

方案完全可行,以下是具体实现步骤:

1. 配置Google Apps Script(GAS)Web应用部署

  • 部署GAS时,将执行应用为设置为「用户访问Web应用时」,确保GAS以当前授权用户的身份运行,而非开发者账号。
  • 谁可以访问应用根据需求选择(如「仅限我的组织内的任何人」或「仅限特定用户」),禁止选择匿名访问。

2. 配置关联Google Cloud项目的OAuth同意屏幕

  • 打开GAS对应的Cloud项目(通过GAS编辑器「资源」→「云平台项目」进入)。
  • 在Cloud Console中配置OAuth同意屏幕:
    • 选择应用类型(公开或内部),填写基础信息。
    • 添加GAS业务所需的授权范围(例如https://www.googleapis.com/auth/script.webapp.deploy,按需调整)。
    • 将observablehq.com添加到「授权域」列表,允许跨域授权请求。

3. 创建Google OAuth客户端ID

  • 在Cloud Console「API和服务」→「凭据」中,创建「OAuth客户端ID」,应用类型选「Web应用」。
  • 添加Observablehq的重定向URI,例如https://observablehq.com/。
  • 记录生成的客户端ID,用于后续Notebook中的授权配置。

4. 在Observablehq Notebook中实现授权逻辑

加载Google gapi库,实现授权弹窗与令牌获取:

// 加载gapi客户端
import { load } from "https://esm.sh/@google/gapi-client";
await load('client:auth2');

// 初始化OAuth客户端
await gapi.client.init({
  clientId: '你的OAuth客户端ID',
  scope: '你配置的授权范围', // 例如"https://www.googleapis.com/auth/script.webapp.deploy"
});

// 创建授权交互按钮
viewof authorize = md`**点击授权访问Google服务**`;

// 处理授权与请求逻辑
if (authorize) {
  const authInstance = gapi.auth2.getAuthInstance();
  if (!authInstance.isSignedIn.get()) {
    await authInstance.signIn(); // 弹出Google授权弹窗
  }
  
  // 获取访问令牌
  const accessToken = authInstance.currentUser.get().getAuthResponse().access_token;
  
  // 调用GAS Web应用
  const response = await fetch('你的GAS Web应用URL', {
    headers: {
      'Authorization': `Bearer ${accessToken}`
    }
  });
  
  const result = await response.json();
  console.log('GAS返回结果:', result);
}

5. 在GAS中验证用户身份

在doGet或doPost函数中验证访问合法性:

function doGet(e) {
  // 获取当前授权用户
  const activeUser = Session.getActiveUser();
  if (!activeUser) {
    return ContentService.createTextOutput(JSON.stringify({error: '未授权访问'}))
      .setMimeType(ContentService.MimeType.JSON);
  }
  
  // 处理业务逻辑并返回结果
  return ContentService.createTextOutput(JSON.stringify({
    message: '访问成功',
    userEmail: activeUser.getEmail()
  })).setMimeType(ContentService.MimeType.JSON);
}

注意事项

  • 若OAuth同意屏幕处于测试模式,仅添加的测试用户可完成授权;需发布到生产模式并通过Google审核后,才能向所有用户开放。
  • 访问令牌有效期为1小时,可启用离线访问获取刷新令牌以自动续期。
  • 修改GAS代码后需重新部署为新版本,确保更新生效。

内容的提问来源于stack exchange,提问作者user9137

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 20:22:06