【问题标题】:Get JSON from a Google Apps Script web-app from another web-app without anonymous access从 Google Apps Script 网络应用程序获取 JSON 从另一个网络应用程序获取 JSON,无需匿名访问
【发布时间】:2020-10-01 11:58:46
【问题描述】:

首先,这个问题与Fetch JSON object from Google WebApp from another Google WebApp 重复,但是,该问题已有 6 年历史了,而答案在我的情况下不起作用——详情如下。

--

我有一个 Google Apps Script 网络应用程序,它返回 JSON 并以我的身份运行,并且我的组织中的任何人都可以访问它。由于种种原因,我无法匿名发布为answered from the other question

function doGet(request)
{
    return ContentService.createTextOutput(JSON.stringify(request)).setMimeType(ContentService.MimeType.JSON);
}

我正在尝试使用 UrlFetchApp.fetch(...) 从另一个网络应用程序调用此网络应用程序,但它似乎返回了一堆 HTML 而不是预期的 JSON 输出。

function testIt()
{
    var a = UrlFetchApp.fetch("https://script.google.com/a/verizon.com/macros/s/[redacted]/exec");
    Logger.log(a.getContentText());
}

我了解第二个网络应用程序,即带有 testIt 的应用程序从 Google 的服务器运行,因此 UrlFetchApp.fetch 调用是匿名的。

必须有办法传递运行testIt的用户的身份验证令牌?

我试过了,但也没有用:

var a = UrlFetchApp.fetch("https://script.google.com/a/verizon.com/macros/s/AKfycbxseotobMLXnid5PT_UpBRWZdNrhhX2EOegeCd4b9gFA2VbAvLm/exec", {
    "method":"GET",
    "muteHttpExceptions": true,
    "headers": {
        "Authorization" : "Basic " + ScriptApp.getOAuthToken()
    }
});

我做错了什么还是我所追求的不可能?

基本上,我拥有自己的网络应用程序,而其他人拥有他们拥有的网络应用程序。我正在尝试找到一种方法,他们可以从他们的网络应用程序调用我的网络应用程序,以执行他们的网络应用程序无法访问的某些事情(将一些数据写入某些工作表并从我的帐户发送一些电子邮件)。

【问题讨论】:

  • 虽然我不确定这是否是您问题的直接解决方案,但是在您的脚本中,当Basic 修改为Bearer 时,您会得到什么结果?另外,您能否确认 Drive API 的范围包含在您的范围中?如果不包括在内,请将// DriveApp.getFiles() 作为评论行。由此,https://www.googleapis.com/auth/drive.readonly 被包括在内。我认为在 Web Apps 的情况下,这可以用于访问。 Ref
  • 基本上,我有一个我自己的网络应用程序,而其他人也有一个他们自己的网络应用程序只要两者在同一个域中并且 webapp1 具有读取权限webapp2,Tanaike 提到的上述解决方法应该可以工作。
  • 您能否确认上述 cmets 解决了您的问题?
  • 是的,这行得通。我真是个白痴。谢谢@Tanaike!如果您将其作为答案,那么我将其标记为。
  • 感谢您的回复。我很高兴你的问题得到了解决。我将其发布为答案。我认为这对其他用户也很有用。你能确认一下吗?

标签: google-apps-script web-applications permissions


【解决方案1】:

当它使用访问令牌访问Web Apps时,请进行如下修改。

发件人:

"Authorization" : "Basic " + ScriptApp.getOAuthToken()

"Authorization" : "Bearer " + ScriptApp.getOAuthToken()
  • 作为本案的重点,请确认Drive API的范围是否包含在您的范围内。
  • 如果不包括,请将// DriveApp.getFiles()作为注释行。这样,https://www.googleapis.com/auth/drive.readonly 就包含在范围内。我认为在 Web Apps 的情况下,这可以用于访问。

参考:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2014-05-20
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 2018-03-20
    相关资源
    最近更新 更多