Google Colab使用疑问:是否可以缓存Google Drive的身份验证信息?
Google Colab缓存Google Drive身份验证的可行方案
直接复用临时OAuth token失效是Colab运行时的特性导致的:Colab默认的运行时环境是临时分配的,授权凭证默认存储在运行时的本地路径中,运行时回收重启后路径会被清空,同时token的有效期限制也会导致直接复用失效。以下是两种稳定可行的缓存方案:
方案1:凭证持久化到个人Google Drive私有目录
该方案只需首次完成一次授权,后续新开运行时可直接读取保存的凭证完成验证,无需重复走授权流程:
- 首次运行执行以下代码,完成授权后将凭证持久化存储到你的Drive私有路径:
from google.colab import auth, drive from google.oauth2.credentials import Credentials from google.auth.transport.requests import Request import os, json # 首次完成Drive挂载与授权 drive.mount('/content/drive') auth.authenticate_user() # 读取当前生成的授权凭证 with open('/content/adc.json', 'r') as f: creds_data = json.load(f) # 新建私有存储目录并保存凭证,避免后续被运行时清理 !mkdir -p /content/drive/MyDrive/private_colab_auth with open('/content/drive/MyDrive/private_colab_auth/colab_drive_creds.json', 'w') as f: json.dump(creds_data, f)
- 后续每次新开运行时,执行以下代码直接读取存储的凭证完成验证:
from google.oauth2.credentials import Credentials from google.auth.transport.requests import Request from googleapiclient.discovery import build import json from google.colab import drive # 先快速挂载Drive(该步骤仅读取已保存的凭证,不需要弹出授权页面) drive.mount('/content/drive', force_remount=False) # 读取提前存储的授权凭证 with open('/content/drive/MyDrive/private_colab_auth/colab_drive_creds.json', 'r') as f: saved_creds = json.load(f) creds = Credentials.from_authorized_user_info(saved_creds) # 凭证过期时自动刷新,无需重新授权 if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) # 初始化Drive服务,身份验证完成 drive_service = build('drive', 'v3', credentials=creds)
方案2:使用drive.mount参数减少重复授权
如果你的运行时不会被频繁回收,可以直接使用Colab自带的参数跳过重复挂载验证,该方法操作最简单:
from google.colab import drive # force_remount设为False时,只要当前运行时已完成过授权,就不需要重新验证 drive.mount('/content/drive', force_remount=False)
注意:该方法仅在当前运行时未被回收的情况下生效,运行时重启后仍然需要重新授权,适合短时间内多次挂载的场景。
注意事项
- 授权凭证文件包含你的Google账号操作权限,请不要将文件分享给他人,也不要存放在Drive的公开共享目录中,避免权限泄露
- 谷歌官方限制OAuth refresh token的最长有效期为6个月,若超过6个月未使用该凭证,需要重新执行首次授权流程更新凭证
- 如果你修改了账号密码、手动撤销了Colab的授权权限,已保存的凭证会直接失效,需要重新生成
内容的提问来源于stack exchange,提问作者HappyFace
相关产品推荐
相关产品推荐

