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

如何通过API自动生成Google Refresh Token?规避手动操作与网络限制

Google OAuth 令牌自动化生成解决方案

方案一:使用服务账号(Service Account)实现全后端自动化

这是最适配你场景的方案,完全无需用户交互,也不用处理 refresh token 过期问题,直接在后端完成认证。

操作步骤:

  1. 登录 Google Cloud 控制台,创建服务账号并下载对应的 JSON 密钥文件(存放在安全路径,禁止提交到代码仓库)。
  2. 给服务账号分配目标 API 访问权限:
    • 访问团队共享的 Google Workspace 资源(如表格、文档):直接在资源共享设置里添加服务账号邮箱,赋予对应权限(只读/编辑)。
    • 访问用户个人非共享数据:需要 Google Workspace 管理员开启域级授权,并配置对应 API 权限范围。
  3. Python 代码实现认证:
from google.oauth2 import service_account
from googleapiclient.discovery import build

# 替换为你的服务账号密钥文件路径
SERVICE_ACCOUNT_KEY_PATH = "./service-account-key.json"
# 替换为你需要的 API 权限范围(如 Sheets、Drive 等)
API_SCOPES = ["https://www.googleapis.com/auth/spreadsheets.readonly"]

# 生成凭据,自动处理令牌刷新
credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_KEY_PATH, scopes=API_SCOPES
)

# 构建 API 客户端(以 Sheets API 为例)
service = build("sheets", "v4", credentials=credentials)

# 后续 API 调用示例
sheet = service.spreadsheets()
result = sheet.values().get(spreadsheetId="你的表格ID", range="Sheet1!A1:C5").execute()
values = result.get("values", [])

方案二:基于用户 OAuth 流程的自动化(仅当必须使用个人账号时)

如果必须用个人 Google 账号访问数据,可通过以下方式解决 localhost 限制和手动操作问题:

解决 localhost 限制:

  • 配置公网可访问的回调端点(如公司内部服务器的简单 HTTP 服务、云服务器端点),在 Google Cloud 控制台的 OAuth 客户端设置中,将重定向 URI 替换为该公网地址。
  • 若无法部署公网端点,可用无头浏览器(如 Selenium)自动化首次授权流程,在服务器端模拟浏览器操作完成授权,避免手动复制 URL。

实现令牌自动刷新:

首次授权时,代码需设置 access_type="offline",这样会返回长期有效的 refresh token(注意:Google 对部分客户端类型的 refresh token 会设有效期,建议选择「桌面应用」类型以获得更稳定的令牌)。后续脚本可自动用 refresh token 获取新的 access token:

from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from google.auth.transport.requests import Request

# 首次授权后保存的凭据文件(含 refresh_token)
TOKEN_FILE = "./token.json"

# 加载凭据,自动刷新过期令牌
creds = Credentials.from_authorized_user_file(TOKEN_FILE, API_SCOPES)
if creds.expired and creds.refresh_token:
    creds.refresh(Request())
    # 保存刷新后的凭据
    with open(TOKEN_FILE, "w") as token:
        token.write(creds.to_json())

# 构建 API 客户端
service = build("sheets", "v4", credentials=creds)

自动化首次授权流程(可选):

用 Selenium 模拟浏览器完成授权,避免手动操作:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from google_auth_oauthlib.flow import Flow
from google.auth.transport.requests import Request

# 配置 OAuth 流
flow = Flow.from_client_secrets_file(
    "./client_secret.json",
    scopes=API_SCOPES,
    redirect_uri="你的公网回调地址"
)

# 获取授权 URL
authorization_url, state = flow.authorization_url(access_type="offline", prompt="consent")

# 无头模式启动 Chrome
options = webdriver.ChromeOptions()
options.add_argument("--headless=new")
driver = webdriver.Chrome(options=options)
driver.get(authorization_url)

# 模拟输入账号密码(注意:仅在受控环境使用,避免明文存储密码)
driver.find_element(By.ID, "identifierId").send_keys("你的Google账号")
driver.find_element(By.ID, "identifierNext").click()
time.sleep(2)
driver.find_element(By.NAME, "Passwd").send_keys("你的密码")
driver.find_element(By.ID, "passwordNext").click()
time.sleep(3)

# 获取回调后的 URL 并交换令牌
callback_url = driver.current_url
flow.fetch_token(authorization_response=callback_url)

# 保存凭据
with open(TOKEN_FILE, "w") as token:
    token.write(flow.credentials.to_json())

driver.quit()

注意:无头浏览器存储账号密码存在安全风险,建议优先手动完成首次授权,后续依赖 refresh token 自动刷新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:05:11