在App Maker中使用来自应用程序脚本的自定义库:授权问题

时间:2019-02-20 16:04:24

标签: google-apps-script google-app-maker

我正在Apps脚本中使用此代码

function getUserObjByEmail(email){

    // Same as using AdminDirectory class.
    var apiUrl = "https://www.googleapis.com/admin/directory/v1/users/"+email+"?fields=id";
    var token = ScriptApp.getOAuthToken();
    var header = {"Authorization":"Bearer " + token};
    var options = {
        "method": "GET",
        "headers": header
    };

    var response = JSON.parse(UrlFetchApp.fetch(apiUrl, options));
    return response;
}

我作为App Maker项目中的函数运行。由于我具有管理员角色(我想不确定),因此当我使用该应用程序时一切都会顺利进行,但是当我们域中的其他普通用户开始使用已部署的应用程序制造商应用程序时,就会出现问题。我检查了服务器日志及其完整的消息:

Exception: Request failed for 
https://www.googleapis.com/admin/directory/v1/users/email@domain.com?fields=id 
returned code 403. 
Truncated server response: { "error": { "errors": [ { "domain": "global",
"reason": "forbidden", "message": "Not Authorized to access this
resource/api" ... (use muteHttpExceptions option to examine full response)

有人知道如何解决此问题吗?我已手动添加了应用程序脚本库所需的作用域,并添加了以下内容:

"https://www.googleapis.com/auth/script.external_request",
"https://www.googleapis.com/auth/admin.directory.user"

1 个答案:

答案 0 :(得分:1)

发生这种情况的原因是因为您具有管理员权限,否则将收到相同的错误消息。其他用户没有管理员权限,因此他们得到此错误。要解决此问题,您可以将运行它的应用程序部署为开发人员,也可以使用服务帐户来模拟管理员并执行该过程。

关于第一种方法,您可以在https://developers.google.com/appmaker/security/identity处找到更多信息。

关于第二种方法,您可以使用以下应用程序脚本库https://github.com/gsuitedevs/apps-script-oauth2#using-service-accounts

此外,如果您不需要获取自定义架构信息,则只需使用目录模型即可,该模型应适用于所有用户。在此处检查参考:https://developers.google.com/appmaker/models/directory