Mar*_*rov 6 web-applications oauth google-apps-script
我需要代表登录到我的系统的用户执行 GAS 服务。所以我有她/他的访问令牌。我希望以某种方式将令牌传输到网络应用程序,而不必再次授权用户将其用于某些活动。这能实现吗?谢谢。
编辑:我认为我没有正确解释我想要完成的任务。这是我尝试实现的工作流程:
谢谢
小智 6
马丁的答案最终对我有用,但当我制作原型时遇到了一个主要障碍。
我需要手动添加以下范围,因为 google apps 脚本的“自动范围检测系统”没有要求它:"https://www.googleapis.com/auth/drive.readonly"。这导致UrlFetchApp.fetch总是给 401 提供我不理解的附加信息。记录此附加信息将显示 html,包括以下字符串
Sorry, unable to open the file at this time.</p><p> Please check the address and try again.
我还是不太明白为什么"https://www.googleapis.com/auth/drive.readonly"有必要。这可能与我们可以使用 /dev url 有关,但谁可以使用 /dev url 是通过使用脚本文件的驱动器权限来检查的。
也就是说,以下设置对我有用(它也适用于doGetetc,但我选择了doPost)。我选择在清单文件中明确列出所需的最低范围,但您也可以确保调用脚本将请求以不同方式访问驱动器的权限。我们有两个谷歌应用程序脚本项目,Caller 和 WebApp。
在Caller的manifest文件中,即appsscript.json
{
...
"oauthScopes":
[
"https://www.googleapis.com/auth/drive.readonly",
"https://www.googleapis.com/auth/script.external_request"]
}
Run Code Online (Sandbox Code Playgroud)
在调用者的Code.gs中
function controlCallSimpleService(){
var webAppUrl ='https://script.google.com/a/DOMAIN/macros/s/id123123123/exec';
// var webAppUrl =
// 'https://script.google.com/a/DOMAIN/macros/s/id1212121212/dev'
var token = ScriptApp.getOAuthToken();
var options = {
'method' : 'post'
, 'headers': {'Authorization': 'Bearer '+ token}
, muteHttpExceptions: true
};
var response = UrlFetchApp.fetch(webAppUrl, options);
Logger.log(response.getContentText());
}
Run Code Online (Sandbox Code Playgroud)
在 WebApp 的 Code.gs 中(被调用的 Web 应用程序)
function doPost(event){
return ContentService.createTextOutput("Hello World");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18223 次 |
| 最近记录: |