调用Google Drive API触发401错误:Active session is invalid. Error code: 4
针对你遇到的Gmail API正常但Drive API报401权限拒绝的问题,以下是几个针对性的排查和解决方向:
重新生成包含Drive权限的OAuth令牌
虽然你确认了权限范围配置,但当前使用的令牌可能是在Drive权限添加前生成的,并未包含Drive的访问权限。需要删除本地存储的OAuth令牌文件(比如Ruby环境中默认存储路径为~/.credentials/[your-app-name].json),然后重新运行程序,引导用户完成完整的授权流程,确保新令牌包含Drive相关权限(如https://www.googleapis.com/auth/drive或https://www.googleapis.com/auth/drive.readonly)。检查OAuth客户端ID配置
若使用的是桌面应用类型的客户端ID,可能存在会话有效性验证问题。尝试在Google Cloud控制台中将客户端ID类型切换为Web应用,并确保重定向URI配置正确(本地测试可添加http://localhost:3000或对应端口)。另外,确认客户端ID未被禁用或限制。排查令牌刷新机制
错误中的"Active session is invalid"可能是因为访问令牌过期且刷新令牌失效。检查代码中是否正确实现了令牌自动刷新逻辑,Google API Ruby客户端通常会自动处理刷新,但如果刷新令牌已过期(比如超过7天未使用或用户撤销了授权),则需要重新授权获取新的刷新令牌。清除本地Google账户会话冲突
本地环境若登录多个Google账户,可能导致授权会话混淆。尝试使用浏览器隐身模式完成授权流程,或清除浏览器中所有Google账户的登录会话后,重新授权单一目标账户。检查Google Cloud项目状态
登录Google Cloud控制台,查看Drive API的状态是否为"已启用",同时检查项目是否存在API调用限制或未验证应用的警告。若应用未通过Google OAuth审核,部分敏感权限可能会被临时限制,导致会话验证失败。
内容的提问来源于stack exchange,提问作者stellard

