【问题标题】:Limiting Google Apps Script Web app to certain users only将 Google Apps Script Web 应用程序仅限于某些用户
【发布时间】:2017-08-12 17:57:12
【问题描述】:

制作一个网络应用程序来更改我的 Google 云端硬盘上的某些(表格)文件(即用户将像我一样使用该应用程序),但我想限制网络应用程序的访问权限 仅适用于某些用户。部署应用程序时,我只能选择将其设为私有或公开。 一种解决方案是使用会话类来查看是否有正确的用户登录。

function onAppBegin(){

 if (Session.getActiveUser().getEmail() != "correctappuser@gmail.com") return null;
 accessGranted();
}

但是,我担心这种粗略的方法是否真的安全且不可破解?

【问题讨论】:

  • 您好,对于我的项目,我需要回答您提出的相同问题。 (接受的答案是一种解决方法,不太安全 - 密钥很容易被盗。)您后来是否偶然找到了答案?还是更好的解决方案?
  • @Tom 这个项目已经很久了。但我找不到其他方法

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


【解决方案1】:

该方法太安全了:没有人可以访问。如果您的 Web 应用程序使用“以我的身份执行应用程序”选项进行部署,则 Session.getActiveUser().getEmail() 可能会返回空字符串。见documentation

电子邮件地址可用的情况各不相同:例如,用户的电子邮件地址在任何允许脚本在未经用户授权的情况下运行的上下文中都不可用,例如 [...] 部署到“以我的身份执行”(即由开发人员而不是用户授权)。但是,如果开发者和用户属于同一个 G Suite 域,则这些限制通常不适用。

问题在于,即使用户登录以访问 Web 应用程序,他们也没有授权它代表他们执行任何操作,例如,查找他们的电子邮件地址。

如果网络应用程序被部署为由“用户访问网络应用程序”执行,那么他们将被要求授权,因此网络应用程序可以了解他们的身份。但是,它将只能修改用户已经可以直接修改的那些文件。

我解决这个困难的方法是给授权用户一个 Web 应用程序的密钥(一些长的随机字符串)。他们通过https://..../exec?key=mykey访问应用程序,应用程序检查密钥如下:

function doGet(e) {
  if (e.parameter.key == "mykey") {
    var ss = SpreadsheetApp.openById("spreadsheet Id");  
    // modify the spreadsheet
  }
}

现在,这比您原来的方法更加粗糙,但它确实有效。如果错误的人获得了密钥,他们将能够使用该应用程序,但损害将仅限于该应用程序的功能。这并不像有人访问您的 Google 帐户那么糟糕。

【讨论】:

  • 我尝试了 Zeeshan Ahmad 以不同方式编写的方法。应用程序请求授权使用Sessionfunctionnality。如果用户说不,则它不返回任何内容,如果用户说是,则检查邮件,如果是错误邮件,则返回(“无效邮件”)。是否有意义。您是否看到方法的安全问题?提前致谢
猜你喜欢
  • 2014-05-20
  • 1970-01-01
  • 2014-02-22
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-09
  • 1970-01-01
相关资源
最近更新 更多