Unity WebGL应用调用Google Drive API出现403 Forbidden(缺API密钥)求助
问题背景
过去一周,我们基于Unity v2019.4.16f1开发的WebGL应用突然无法通过Google Drive API读取文件,Web控制台抛出以下错误:
UnityGoogleDrive: HTTP/1.1 403 Forbidden
Google Drive API Error Description: Code '403' Message: 'The request is missing a valid API key.'
Domain: 'global' Reason: 'forbidden' Message: 'The request is missing a valid API key.' LocationType: '' Location: ''
(Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)
应用之前稳定运行4个月,仅配置了OAuth 2.0客户端ID,从未使用过API密钥。当前用的Unity谷歌云盘插件没有明显的API密钥设置入口;本地localhost运行时一切正常,禁用再重新启用Drive API后首次请求能成功,但后续还是报错;绑定计费方案后问题也没解决,现在已经生成了API密钥,但不知道该怎么传入,也不确定是不是问题根源。
解决步骤
1. 确认API调用规则变更
Google近期可能调整了Drive API的权限要求,部分原本只需要OAuth授权的接口,现在强制要求同时携带API密钥,这可能是之前正常现在报错的核心原因。
2. 给插件强制传入API密钥
虽然插件表面没提供设置入口,但可以通过代码给请求手动添加API密钥参数:
在发起Drive API请求前,往请求的Query参数里加key=你的API密钥,示例代码如下:
var fileListRequest = new UnityGoogleDrive.Data.FileListRequest(); fileListRequest.QueryParameters.Add("key", "你的API密钥内容"); UnityGoogleDrive.DriveFiles.List(fileListRequest, OnFilesReceivedCallback);
也可以找插件的全局配置脚本(比如GoogleDriveSettings),在初始化阶段给所有请求统一添加API密钥,避免每个请求都手动配置。
3. 检查API密钥的配置正确性
- 确保API密钥已启用Drive API权限:在Google Cloud控制台的API密钥页面,编辑你的密钥,在「API限制」里选择「Google Drive API」,不要选「无限制」。
- 检查应用限制:如果密钥设置了HTTP引用限制,必须把WebGL应用的部署域名(带https前缀)加进去,localhost也可以添加作为测试用。
4. 排查WebGL环境的特殊问题
WebGL的请求机制和本地运行不一样,要确认:
- OAuth 2.0的授权流程在WebGL里是否正常拿到了有效令牌,请求是否同时携带了令牌和API密钥。
- 插件是否适配WebGL环境的请求构造,试试把插件更到最新版本,修复可能存在的WebGL专属bug。
5. 用外部工具验证API有效性
用Postman之类的工具直接调用相同的Drive API接口,同时带上你的API密钥和OAuth令牌,如果Postman能成功返回数据,说明问题出在Unity插件的请求构造上;如果Postman也报错,就重点检查API密钥和OAuth的权限配置。
内容的提问来源于stack exchange,提问作者Andrew Jackman

