Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script Can';t使用访问令牌访问部署为web应用的Google Apps脚本_Google Apps Script_Oauth - Fatal编程技术网

Google apps script Can';t使用访问令牌访问部署为web应用的Google Apps脚本

Google apps script Can';t使用访问令牌访问部署为web应用的Google Apps脚本,google-apps-script,oauth,Google Apps Script,Oauth,我想进一步了解应用脚本web应用在使用OAuth访问令牌访问它们时是如何工作的 这是应用程序脚本web应用程序: function doPost(e) { return ContentService.createTextOutput('ok'); } function doGet(e) { return ContentService.createTextOutput('ok'); } 它被部署为:我 谁有权访问该应用程序:请参见下文 我使用Postman访问应用程序脚本web应用程序

我想进一步了解应用脚本web应用在使用OAuth访问令牌访问它们时是如何工作的

这是应用程序脚本web应用程序:

function doPost(e) {
  return ContentService.createTextOutput('ok');
}

function doGet(e) {
  return ContentService.createTextOutput('ok');
}
它被部署为:我

谁有权访问该应用程序:请参见下文

我使用Postman访问应用程序脚本web应用程序。我调用web应用程序URL(以
/exec
结尾),并提供标题
Authorization:Bearer ACCESS\u TOKEN

我使用

  • 我以我的身份登录:它适用于每个“有权访问应用程序的人”权限,这正是我所期望的
  • 作为域中的其他人登录:仅适用于“任何人,甚至匿名”权限,并且仅当传入请求没有授权标头时。否则我会得到一个403禁止的错误。 我希望它能用于以下权限:
    • “任何人,甚至匿名”,即使请求具有授权标头
    • “任何人”
    • '域中的任何人'
  • 以域外其他人身份登录:仅适用于“任何人,甚至匿名”权限,并且仅当传入请求没有授权标头时才有效。否则我会得到一个403禁止的错误。 我希望它能用于以下权限:
    • “任何人,甚至匿名”,即使请求具有授权标头
    • “任何人”
我错过了什么

编辑


用于生成访问令牌的范围是

此解决方案如何

规范:
  • 当用户访问(运行脚本)部署为有权访问该应用的
    “用户:”的Web应用时,需要将Web应用的脚本共享给用户。此外,还需要访问令牌。本规范自2018年4月11日起生效
目标:
  • 您希望在以下条件下访问Web应用:“
    ”谁有权访问该应用:”:任何人不共享脚本
不幸的是,这可以通过规范直接实现。因此,需要考虑一种变通方法

解决方法: 在上述情况下,当您想让用户在不共享脚本的情况下访问Web应用程序时,我想提出以下解决方法

  • 将Web应用部署为有权访问该应用的
    ::任何人,即使是匿名的
  • 当用户访问Web应用时,用户使用带有查询参数和/或负载的密码
  • 通过以上设置,您可以使用户无需共享脚本即可访问Web应用。在这种情况下,使用密码而不是访问令牌

    示例脚本:Web应用程序端 在此示例中,密码用作查询参数。这可以像使用API密钥一样使用

    function doPost(e) {
      if (e.parameter.password === "sample") {
        return ContentService.createTextOutput("Done.");
      }
      return ContentService.createTextOutput("Error.");
    }
    
    function doGet(e) {
      if (e.parameter.password === "sample") {
        return ContentService.createTextOutput("Done.");
      }
      return ContentService.createTextOutput("Error.");
    }
    
    示例:客户端 注:
    • 当它使用上述curl示例访问在上述条件下部署的Web应用程序时,
      Done.
      doGet()
      返回。如果密码错误,则返回
      错误。
      。通过此操作,您可以让用户无需共享脚本即可访问Web应用程序
    • 修改Web应用的脚本时,请将Web应用部署为新版本。由此,最新的脚本得到了反映
    参考资料:

    虽然我不确定这是否与您的问题直接相关,但我可以问一下访问令牌中包含的作用域吗?谢谢您的回复。从您的回复中,我认为范围不是您问题的原因。当状态代码为403时,您能否向我们显示错误消息?因此,例如,对于部署的应用程序,谁可以访问设置为“任何人”,并作为域外用户登录,响应是一个html页面。标题是“您需要许可”,内容是“想要加入?”?请求访问,或切换到具有权限的帐户。了解更多。您以xxxxx的身份登录,并显示一个按钮“请求访问”
    curl -L "https://script.google.com/macros/s/###/exec?password=sample"