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

组织共享限制下允许服务账号访问Google Spreadsheet的解决方案求助

可行解决方案

方案1:使用已配置全域委托的服务账号模拟组织内用户访问(无需共享表格给服务账号)

你之前配置完全域委托后没有在代码中指定模拟的用户身份,是调用失败的核心原因。操作步骤如下:

  1. 先确认Google Admin控制台中,已给该服务账号授权了以下最小必要OAuth作用域:
    • https://www.googleapis.com/auth/spreadsheets(表格读写权限,只读可换为https://www.googleapis.com/auth/spreadsheets.readonly)
    • https://www.googleapis.com/auth/drive.readonly(Drive只读权限,用于定位表格)
  2. 修改你的Python代码,初始化gspread时新增subject参数,传入组织内本身就有权限访问目标表格的用户邮箱(比如你自己的工作邮箱,属于你们组织白名单域名即可),无需再把表格共享给服务账号:
import gspread
import numpy as np
import pandas as pd 

# 初始化时指定要模拟的组织内用户邮箱
gc = gspread.service_account(
    filename='你的服务账号凭据json路径',
    subject='你所在组织内有权限访问该表格的用户邮箱@你的组织域名.com'
)
sss = gc.open_by_key("<My spreadsheet ID>")
worksheet = sss.worksheet("<My sheet name>")

df = pd.DataFrame(worksheet.get_all_records())

这个方案的优势是无需人工交互,适合自动化脚本运行,且不会突破组织的安全共享限制。

方案2:使用桌面应用OAuth凭据授权(无需服务账号、无需额外共享配置)

如果不想配置全域委托,可以改用个人OAuth凭据授权,走普通用户的身份验证流程:

  1. 在Google Cloud Console当前项目的「API和服务」-「凭据」页面,创建「OAuth 2.0 客户端ID」,应用类型选择「桌面应用」,下载生成的凭据json文件。
  2. 改用gspread的OAuth方式初始化,第一次运行时会弹出浏览器,你用组织内有权限访问表格的账号登录授权即可,后续会自动缓存token无需重复登录:
import gspread
import pandas as pd

gc = gspread.oauth(
    credentials_filename='你下载的桌面应用凭据json路径',
    authorized_user_filename='缓存token的本地路径,比如token.json'
)
sss = gc.open_by_key("<My spreadsheet ID>")
worksheet = sss.worksheet("<My sheet name>")
df = pd.DataFrame(worksheet.get_all_records())

这个方案配置更简单,完全符合组织的共享策略,适合不需要完全无人值守的脚本场景。

注意事项

  • 所有凭据文件、token文件不要上传到公共代码仓库,建议加入.gitignore
  • 优先使用最小权限的OAuth作用域,降低安全风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:36:01