【问题标题】:Create apps script service accounts to access Drive, Sheet, and Docs创建应用程序脚本服务帐户以访问云端硬盘、工作表和文档
【发布时间】:2023-01-19 23:40:15
【问题描述】:

我的情况与这篇文章的 OP 类似: User access request when GAS run as the user

我需要以“活跃用户”身份运行网络应用程序,允许该用户访问云端硬盘、文档和表格资源,但不允许用户直接访问它们。

但是,我对这个问题的了解要少得多。

据我了解,我需要创建一个服务帐户,以便以“活动用户”身份运行的脚本可以访问活动用户无权访问的驱动器、工作表和文档资源。

我也在查看其他资源以及 Google 的文档,但有点不知所措。

谁能解释一下这方面的基础知识?也许真正没有经验的用户可以理解的教程(或此类链接)?我只需要在正确的方向上开始。

先感谢您!

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    使用 App Script 模拟用户

    应该可以生成密钥并启动模拟过程并调用范围和 API。

    function getJWT(sub) {
      var header = { "alg": "RS256", "typ": "JWT" }
      var encodedheader = Utilities.base64EncodeWebSafe(JSON.stringify(header))
      var key = "-----BEGIN PRIVATE KEY----- fjsklfjl;sdjfasd -----END PRIVATE KEY-----
    "
    
      var time = Math.floor(new Date().getTime() / 1000)
    
      
    
    
      var claim = {
        "iss": "yourserviceaccount@mail-p-any.iam.gserviceaccount.com",
        "scope": "https://mail.google.com/",
        "aud": "https://oauth2.googleapis.com/token",
        "iat": time,
        "exp": time + 3600,
        "sub": sub[0]
      }
    
    
      var encodedclaim = Utilities.base64EncodeWebSafe(JSON.stringify(claim))
    
      var input = encodedheader + "." + encodedclaim
    
      var signed = Utilities.computeRsaSha256Signature(input, key)
    
      var base64signed = Utilities.base64Encode(signed)
    
      var jwt = encodedheader + "." + encodedclaim + "." + base64signed
    
      return jwt
    
    
    }
    
    function getAccessToken(user) {
      var payload = {
        "grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer",
        "assertion": getJWT(user)
      }
      var params = {
        "method": "POST",
        "contentType": "application/x-www-form-urlencoded",
        "payload": payload,
        "muteHttpExceptions": true
      }
      var response = UrlFetchApp.fetch("https://oauth2.googleapis.com/token", params)
    
      var output = JSON.parse(response.getContentText())
      console.log(output.access_token)
      return output.access_token
    }
    

    您还可以查看库和分步过程,了解如何从此处以另一种方式实现它:

    我的代码示例基于以下示例脚本:

    通过这种方式,您可以模拟用户并代表您组织的用户运行或拨打电话,而无需访问它。这可能是您开始思考如何开始的地方。

    参考

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 2016-06-01
      • 1970-01-01
      • 2019-02-28
      • 1970-01-01
      相关资源
      最近更新 更多