【问题标题】:OAuth2 Library Yields Property Storage Quota ErrorOAuth2 库产生属性存储配额错误
【发布时间】:2020-09-26 18:12:10
【问题描述】:

我有一个使用Google's OAuth2 library 的脚本,最近开始因错误而失败

您已超出属性存储配额。请删除一些属性,然后重试。

我检查了属性,并没有发现与原始配置有任何意外差异。我的属性的完整字符串化文本长度约为 5000 个字符,远低于 500kB/property store quota 和最长的单个属性约 2500 个字符(低于 9kB/值配额)。

我发现只有当我将Google's OAuth2 library 与服务帐户一起使用时才会出现此错误。但是,如果我将library dist 直接包含在我的项目中,错误就会消失。

如果库和本地副本看起来是相同的版本,为什么属性服务的行为方式会有所不同?

(在我将 OAuth2 库与标准授权代码授予流程一起使用的其他脚本中,我没有问题。)

此脚本将复制错误,但需要您create a service account 并按照getAdminDirectory_() 中的定义设置正确的脚本属性。 (使用 Rhino 解释器。)

/**
 * Get a GSuite User.
 */
function getUser() {
  var email = "name@exampledomain.com";
  var user = AdminDirectory_getUser_(email);
  Logger.log(user);
}

/**
 * Gets a user from the GSuite organization by their email address.
 * @returns {User} - https://developers.google.com/admin-sdk/directory/v1/reference/users#resource
 */
function AdminDirectory_getUser_(email) {
  var service = getAdminDirectory_();
  if (service.hasAccess()) {
    var url = "https://www.googleapis.com/admin/directory/v1/users/" + email;
    var options = {
      method: "get",
      headers: {
        Authorization: "Bearer " + service.getAccessToken()
      }
    };
    var response = UrlFetchApp.fetch(url, options);
    var result = JSON.parse(response.getContentText());
    return result;
  } else {
    throw service.getLastError();
  }
}

/**
 * Configures the service.
 */
function getAdminDirectory_() {
  // Get service account from properties
  var scriptProperties = PropertiesService.getScriptProperties();
  var serviceAccount = JSON.parse(scriptProperties.getProperty("service_account"));
  
  // Email address of the user to impersonate.
  var user_email = scriptProperties.getProperty("service_account_user");
  
  return OAuth2.createService("AdminDirectory:" + user_email)
  // Set the endpoint URL.
  .setTokenUrl("https://oauth2.googleapis.com/token")
  
  // Set the private key and issuer.
  .setPrivateKey(serviceAccount.private_key)
  .setIssuer(serviceAccount.client_email)
  
  // Set the name of the user to impersonate. This will only work for
  // Google Apps for Work/EDU accounts whose admin has setup domain-wide
  // delegation:
  // https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority
  .setSubject(user_email)
  
  // Set the property store where authorized tokens should be persisted.
  .setPropertyStore(scriptProperties)
  
  // Set the scope. This must match one of the scopes configured during the
  // setup of domain-wide delegation.
  .setScope("https://www.googleapis.com/auth/admin.directory.user");
}

【问题讨论】:

    标签: google-apps-script oauth storage libraries quota


    【解决方案1】:

    这似乎是一个已知问题。考虑在this issue 中添加星号(左上角),让 Google 开发人员知道您受到了影响。考虑向跟踪器添加评论,其中包含#7请求的详细信息

    可能的解决方案:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多