2017-08-12 58 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帳戶那麼糟糕。

相關問題