Google apps script 作为web应用部署的Google Apps脚本存在身份验证问题
我在尝试从第二个GAS调用部署的应用程序脚本(作为web应用程序,可供“任何人”访问)时遇到HTTP 401错误,该脚本具有UrlFetch和授权标头中的承载。直到两周前,这些脚本已经运行了好几个月。 这里有两个小脚本来重现错误 脚本A-部署为web应用,可供“任何人”访问。Google apps script 作为web应用部署的Google Apps脚本存在身份验证问题,google-apps-script,Google Apps Script,我在尝试从第二个GAS调用部署的应用程序脚本(作为web应用程序,可供“任何人”访问)时遇到HTTP 401错误,该脚本具有UrlFetch和授权标头中的承载。直到两周前,这些脚本已经运行了好几个月。 这里有两个小脚本来重现错误 脚本A-部署为web应用,可供“任何人”访问。 function doGet(e) { var params = e.parameter.params; console.info("Parameters : " + JSON.stringify(e.parame
function doGet(e) {
var params = e.parameter.params;
console.info("Parameters : " + JSON.stringify(e.parameter));
return ContentService.createTextOutput("Success");
}
脚本B-通过UrlFetch调用脚本A
function callURL() {
var param = {
method : "get",
headers : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
followRedirects : true,
muteHttpExceptions:true,
};
var url = "https://script.google.com/macros/s/<script_A_deployed_url>/exec?param1=test";
var resp = UrlFetchApp.fetch(url,param);
if(resp.getContentText() != "Success"){
console.info(resp.getContentText());
throw resp.getContentText();
}
}
函数callURL(){
变量参数={
方法:“获取”,
标题:{“授权”:“承载者”+ScriptApp.getOAuthToken()},
以下重定向:正确,
muteHttpExceptions:true,
};
变量url=”https://script.google.com/macros/s//exec?param1=test";
var resp=UrlFetchApp.fetch(url,参数);
如果(分别为getContentText()!=“成功”){
console.info(resp.getContentText());
抛出相应的getContentText();
}
}
您能再次确认以下几点吗
- 您可以在文件->项目属性->范围中查看当前范围
- 例如,以下是作用域。
https://www.googleapis.com/auth/drive.readonly
https://www.googleapis.com/auth/drive.files
https://www.googleapis.com/auth/drive
谁有权访问应用程序:
作为任何人安装时,我确认从2018年4月11日起,需要共享项目才能访问Web应用程序。这可能是由于谷歌的更新。
- 请与用户共享Web应用的项目,然后重试
的用户访问Web应用的设置为执行应用为:
,请使用自己的浏览器授权作用域。此授权只需执行一次
https://www.googleapis.com/auth/script.external_request
,但看起来我们现在至少需要对脚本的读取权限,这意味着我们还需要驱动器作用域。
为了实现这一点,例如,您可以在B脚本中使用此函数对其进行授权
function setScope() {
DriveApp.getRootFolder();
}
你试过用邮递员等做同样的事吗?是的,我设法用失眠来重现这种行为。确切的错误信息是什么?早期相同的设置和代码在401中工作,未经授权。是的,我们几个月来一直在使用此身份验证机制,没有任何问题。请尝试发布具有公共访问权限的应用程序(Anyopne,甚至匿名),看看是否有效,如果有效,然后确保标头正确到达Anks!你给我指出了正确的方向。现在看来,脚本B需要驱动器作用域和至少对脚本A的读取权限,以避免401错误。我将在新的答案中澄清这一点。@Q_C欢迎。最近,我总结了关于Web应用的内容。如果这对你有用,我很高兴。