google-apps-script - 未经授权的 401 错误,同时 'execute as me'

标签 google-apps-script authorization google-oauth google-sites

我正在努力处理我部署的网络应用程序。当“所有拥有链接的人”都可以使用网站权限时,由于应用程序设置为“以我的身份执行”,电子表格会从我的驱动器中正确删除,并创建一个新文件。如果我限制对某些电子邮件地址的访问,该代码将不再有效。

我尝试使用传递 token

  var auth = ScriptApp.getOAuthToken();
  var header = {
    "authorization": "Bearer " + auth
  };
  var params = { 'method':'post', 'headers':header, 'muteHttpExceptions':true};
  var response = UrlFetchApp.fetch(fileURL, params);
  Logger.log(response);

不幸的是,执行响应是

<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>

在我的驱动器中创建了一个包含 html 文本的 Google 文档,因此我认为可以访问,但权限发生了一些变化。谁能指出我正确的方向?

编辑:

即使我传递了 OAuth2 访问 token ,脚本似乎也需要我再次登录。 https://developers.google.com/apps-script/reference/script/script-app#getOAuthToken()

Google 网站的范围已到位,因此我不确定为什么无法使响应正常工作。它在 UrlFetchApp 处失败,但仅传递 OAuth2 token 似乎还不够。

最佳答案

我认为您可以使用 list 与“任何人”一起访问 Web 应用程序。请尝试执行以下流程。

  • 使用 URL 获取方法的项目脚本编辑器。
    1. 查看 -> 显示 list 文件
    2. 请将以下 oauthScopes 添加到 appsscript.json
      • "oauthScopes": ["https://www.googleapis.com/auth/script.external_request", "https://www.googleapis.com/auth/drive"]

这样, ScriptApp.getOAuthToken() 检索到的访问 token 具有上述范围。完成此设置后,请尝试再次运行您的脚本。在您的 sceipt 中,您可以使用 auth 与“任何人”一起访问 Web 应用程序。 .

如果这不起作用,请再次重新部署 Web 应用程序。因为可能无法反射(reflect)最新版本的 Web 应用程序脚本。

引用:

如果这对您没有用,我很抱歉。

关于google-apps-script - 未经授权的 401 错误,同时 'execute as me',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48812174/

相关文章:

python 社交认证: Google login Error: invalid_client

ios - Google身份验证后的React-Native网络请求不携带身份验证cookie

google-apps-script - 如何通过应用程序脚本在特定文件夹中创建电子表格

google-apps-script - 如何通过谷歌脚本更新谷歌驱动器文本文件?

javascript - 在异步 google.script.run 成功时递增 while 循环

authentication - 如何使用 JWT token 管理多设备同时登录?

c# - 后备策略日志授权事件

api - RESTful API 中的多个身份验证级别

laravel - 在 Laravel 5 中使用 Guzzle 和 Socialite 向 Google API 发出请求

google-apps-script - 使用Google Script的Web App作为Webhook直接接收推送通知