使用Bearer令牌认证Google App Script时跨账号REST调用异常排查
问题求助:Google Apps Script Web应用非所有者REST调用失败
场景说明
- 在iOS客户端配置Google登录
- 获取Forms和Drive的accessToken(后续App Script将使用此令牌)
- 编写以下简单的App Script以返回表单的相关信息
function doGet(request) { if (request.parameter.formId !== undefined) { const formId = String(request.parameter.formId); const form = FormApp.openById(formId); return ContentService.createTextOutput(JSON.stringify({ 'status': 'success', "message": form.isAcceptingResponses() })); } }
- 将该App Script部署为Web应用,使用其公开URL;设置为“任何人可执行”并以“当前用户”身份运行
- 从iOS客户端调用该端点,携带
Authorization: Bearer ***请求头(传入通过原生OAuth流程获取的有效未过期令牌)
问题现象
上述场景对于App Script项目所属的Google账号完全正常(无论是浏览器直接访问URL还是REST调用)。其他Google账号通过浏览器访问该URL时也能正常工作。
但对于非项目所有者的Google账号,通过REST调用App Script时失败,响应为HTML页面内容。未提供有效Bearer令牌时,HTML响应明确显示“未授权”;提供令牌后,返回的HTML页面内容不定。
已确认信息
经过排查,已确认以下内容:
appscript.json清单文件包含正确的oauthScopes- 客户端请求的OAuth令牌与这些权限范围匹配
- 关联的单个Google Cloud项目已启用Drive和Forms API
- 尝试调用
/dev版本的URL,排查是否因项目未通过权限验证而返回不安全客户端页面
部署设置如下:
目前对问题原因感到困惑,恳请提供帮助。可补充任何遗漏的上下文信息。
是否可能是项目未通过Google验证导致的?但我认为应该可以使用多个账号测试该Web应用URL?
内容的提问来源于stack exchange,提问作者frazzyfraz
相关产品推荐
相关产品推荐

