GAS中UrlFetchApp如何访问受Google Domain SSO保护的站点
解决方法
核心逻辑
你的站点现在前置了Google账号登录校验,GAS脚本运行时本身就是用你的Google账号授权的,你只需要在请求头中携带当前账号的OAuth2鉴权令牌,即可通过Google端的登录校验,之后再走你原有应用的账号密码鉴权逻辑即可。
操作步骤
- 第一步:配置GAS项目的OAuth授权作用域
首先打开GAS编辑器,点击左侧「项目设置」,勾选「在编辑器中显示appsscript.json清单文件」,回到编辑器页面打开appsscript.json,修改为如下配置(时区可根据你的实际情况调整):
{ "timeZone": "Asia/Shanghai", "dependencies": {}, "oauthScopes": [ "https://www.googleapis.com/auth/script.external_request", "https://www.googleapis.com/auth/userinfo.email", "openid" ], "runtimeVersion": "V8" }
- 第二步:修改请求代码,添加鉴权头
在原有请求的headers中加入Authorization字段,携带当前账号的OAuth令牌,修改后的代码如下:
function return_something() { var url = 'my_url'; var myPayload = { "method": "login", "params": { "user": "my_username", "password": "my_password" }, "id": 1, "auth": null }; var headers = { "Accept": "application/json", // 新增Google鉴权头 "Authorization": "Bearer " + ScriptApp.getOAuthToken() }; var params = { 'method': 'POST', 'muteHttpExceptions': true, 'headers': headers, 'contentType': 'application/json', 'payload': JSON.stringify(myPayload) }; var res = UrlFetchApp.fetch(url, params); var myObj = JSON.parse(res.getContentText()); Logger.log(myObj) }
注意事项
- 如果你的站点是通过Google Cloud身份感知代理(IAP)保护的,需要额外生成指定IAP客户端ID作为受众的令牌,可通过GAS的OAuth2库实现对应逻辑。
- 修改后首次运行脚本会触发新的授权请求,完成授权后即可正常调用。
内容的提问来源于stack exchange,提问作者redditor
相关产品推荐
相关产品推荐

