2017-08-12 67 views
1

制作一个可更改我的Google云端硬盘上特定(表格)文件的Web应用程序(即用户将使用该应用程序作为我),但我想限制Web应用程序仅对某些用户访问 。部署应用程序时,我只能选择将其设为私有或公共。 一个解决方案是使用会话类,看是否有正确的用户登录。仅限某些用户将Google Apps脚本Web应用程序限制为

function onAppBegin(){ 

if (Session.getActiveUser().getEmail() != "[email protected]") return null; 
accessGranted(); 
} 

不过,我很担心,如果这种粗略的方法实际上是安全的,不容易被破解?

回答

1

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

在何种情况下的电子邮件地址可有所不同:例如,用户的电子邮件地址不在允许脚本,并且不需要用户的权限运行,就像任何上下文中可用[...]一个部署为“作为我执行”的web应用程序(即由开发人员而不是用户授权)。但是,如果开发人员和用户属于同一个G Suite网域,这些限制通常不适用。

的问题是,即使用户登录后才能访问的Web应用程序,他们并没有授权其代表他们做任何事,例如,发现他们的电子邮件地址。

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

我解决这个难题的方法是给授权用户一个关键的web应用程序(一些长的随机字符串)。他们通过将https://..../exec?key=mykey访问应用程序,该应用程序检查重点如下:现在

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

,这是比你原来的做法更是简陋,但很有效。如果错误的人获得钥匙,他们将能够使用该应用程序,但损害将限于应用程序可以做的事情。它不像有人访问您的Google帐户那么糟糕。

相关问题