簡體   English   中英

創建應用程序腳本服務帳戶以訪問雲端硬盤、工作表和文檔

[英]Create apps script service accounts to access Drive, Sheet, and Docs

我和這篇文章的OP有類似的情況: User access request when GAS run as the user

我需要以“活躍用戶”身份運行 web 應用程序,允許該用戶訪問雲端硬盤、文檔和表格資源,但不允許用戶直接訪問它們。

但是,我對這個問題的了解要少得多。

據我了解,我需要創建一個服務帳戶,以便以“活動用戶”身份運行的腳本可以訪問活動用戶無權訪問的驅動器、工作表和文檔資源。

我也在查看其他資源以及 Google 的文檔,但有點不知所措。

誰能解釋一下這方面的基礎知識? 也許真正沒有經驗的用戶可以理解的教程(或此類鏈接)? 我只需要在正確的方向上開始。

先感謝您!

使用 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-----\n"

  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
}

您還可以查看庫和分步過程,了解如何從此處以另一種方式實現它:

我的代碼示例基於以下示例腳本:

您還可以從下面的參考資料中查看其他示例代碼。

通過這種方式,您可以模擬用戶並代表您組織的用戶運行或撥打電話,而無需訪問它。 這可能是您開始思考如何開始的地方。

參考

為了那些與我在這個主題上處於相同水平並且處於類似情況的人的利益,我得到了這個工作。 有不對的請大家指正或指正,謝謝。

  • 您不能在以“活動用戶”身份運行的相同代碼中使用這些方法訪問雲端硬盤、文檔和表格。

  • 您必須使用等效的 HTTP 訪問這些 Google 服務
    API 次方法調用。

  • HTTP API 調用需要一個與資源交互的用戶(因為它是從 inte.net 公開調用的,而不是
    從劇本)。

  • 您為此創建一個服務帳戶。 這充當調用的用戶。

當我從 Apps Script 調用 API 時,我從 Ricardo Jose Velasquez Cruz 的回復開始,並找到了其他資源。 https://medium.com/geekculture/how-to-use-service-accounts-and-oauth2-in-google-apps-script-99c4bc91dc31

請注意,Apps 腳本需要一個 OAUTH2 庫才能連接,不確定為什么這不是 GAS 本身內置的: https://github.com/googleworkspace/apps-script-oauth2

如何創建服務帳號並使用它訪問Google Drive(您也使用相同的代碼訪問Docs和Sheet,您只需要使用相應的URL和服務參數): https://www.labnol。組織/代碼/20375-service-accounts-google-apps-script

它與我在此處找到的另一篇文章的代碼基本相同: Google 服務帳戶 / API - 我一直收到錯誤:訪問未被授予或已過期。 (第 454 行,文件“服務”)

希望這可以幫助:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM