使用有效OAuth令牌向Google Apps Script Web App发POST请求遇401未授权错误
以下是针对你遇到问题的排查和解决步骤:
1. 修正OAuth 2.0权限范围
你当前使用的权限范围仅适用于项目管理和部署操作,缺少访问Web App所需的执行权限。将SCOPES替换为包含https://www.googleapis.com/auth/script.webapp.execute的范围:
SCOPES = [ 'openid', 'https://www.googleapis.com/auth/script.webapp.execute' ]
这个范围才是允许用户执行Web App的核心权限,之前的script.projects和script.webapp.deploy无法直接用于Web App的访问请求。
2. 检查Web App的访问权限配置
你的appsscript.json中access设置为DOMAIN,这意味着只有所属Google Workspace域名内的用户才能访问:
- 如果你的Python脚本使用的账号不在该域名下,可临时将
access改为ANYONE(测试环境),或者确认账号属于目标域名 - 保持
executeAs: "USER_ACCESSING"是正确的,确保请求以令牌对应的用户身份执行
3. 确认请求的是正式部署的Web App URL
确保你请求的是已发布的正式版本URL,而非编辑器中的测试URL(URL包含/dev后缀)。测试URL仅支持浏览器访问,脚本请求必须使用正式部署的URL。
4. 验证doPost函数的JSON解析逻辑
确保你的doPost函数正确处理JSON格式的请求体,示例如下:
function doPost(e) { if (!e.postData || e.postData.type !== 'application/json') { return ContentService.createTextOutput(JSON.stringify({error: 'Invalid content type'})) .setMimeType(ContentService.MimeType.JSON); } const payload = JSON.parse(e.postData.contents); return ContentService.createTextOutput(JSON.stringify({message: 'Received', data: payload})) .setMimeType(ContentService.MimeType.JSON); }
5. 检查令牌的受众(Audience)
Google OAuth令牌的受众(aud字段)必须匹配Web App的URL。你可以通过以下方式验证:
- 调用
https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=YOUR_TOKEN端点,检查返回的aud字段是否为你的Web App URL - 如果受众不匹配,重新获取包含正确范围的令牌
内容的提问来源于stack exchange,提问作者steve
相关产品推荐
相关产品推荐

