当前位置: 首页 > 知识库问答 >
问题:

从应用脚本验证服务帐户

束帅
2023-03-14

我正在尝试使用API将成员添加到组中。我在谷歌脚本工具中编写代码,但是,我收到了错误消息:

{
     "error": {
         "errors": [
             {
                 "domain": "global",
                 "reason": "required",
                 "message": "Login Required",
                 "locationType": "header",
                 "location": "Authorization"
             }
         ],
         "code": 401,
         "message": "Login Required"
     }
}

我已经在G套件域中添加了作用域,我已经创建了服务帐户、API密钥、OAuth 2.0密钥。我的要求是:

  var headers = {
    "apiKey" : "****",
    "clientId" : "*****.apps.googleusercontent.com"
  }

  var payload = {
    "email": user,
    "role": "MEMBER"
  }

  var options = {
    "method" : "post",
    "payload" : payload,
    "headers" : headers
  };

  var response = UrlFetchApp.fetch("https://www.googleapis.com/admin/directory/v1/groups/***/members", options);

遗漏了什么,或者我做错了什么?我已经阅读了所有的文档,仍然不知道出了什么问题。

共有2个答案

慕仲渊
2023-03-14

这个AdminDirectory的问题是,只有admin可以使用在后端使用AdminDierctory的应用程序。当普通用户使用AdminDirectory时,没有访问该应用程序的选项。因为应用程序由不同的用户授权。唯一可能的方法是使用OAuth2 API

夏季萌
2023-03-14

当我通过谷歌脚本编写代码时,我发现了一个具有我所需功能的服务。它叫做目录,位于谷歌的管理SDK部分。下面是指向文档的链接,您可以在其中找到示例:

https://developers.google.com/apps-script/advanced/admin-sdk-directory

最后,我的代码是这样的:

function insertMembers(){
  var ss = SpreadsheetApp.getActive()
  var sheet = ss.getSheetByName("")

  var membersInSheet = sheet.getRange(27, 3, sheet.getLastRow())
  var values = membersInSheet.getNumRows()
  var groupId = "email group"

  //Logger.log(membersInSheet)

  for (var i = 0; i < values; i++){
    var getMember = sheet.getRange(27+i, 3).getValue();

    var member = {
      email: getMember,
      role: 'MEMBER'
    };

    if (member != ''){
      var memberAdd = AdminDirectory.Members.insert(member, groupId);
      Logger.log(memberAdd);

    }
  }
}

没有认证,也没有Rest!

 类似资料:
  • 在任何给定的POD中,服务帐户令牌被挂载在位置。 /var/run/secrets/kubernetes.io/serviceaccount/token 我想了解这个令牌是如何签名的。Kubernetes在签名此令牌时使用什么密钥?如何访问有助于脱机签名验证的公钥 /var/run/secrets/kubernetes.io/serviceaccount/ca.crt-我尝试使用与此证书关联的公钥

  • 像这个问题,Google Photos API-身份验证,我对Google Photos API的身份验证很好奇。问题的一个答案说 您需要配置OAuth2.0凭据(客户端ID和机密),而不是API密钥。更多详细信息请参阅以下开发人员文档:https://developers.google.com/photos/library/guides/get-start#request-id Google P

  • 我的团队目前正在开发一个应用程序,使用Admin SDK在GCP中列出公司的域用户,用于入职和非入职目的。 我们使用一个服务帐户来完成这个任务,并且在Google Admin's advanced settings中添加了 作用域。管理SDK API被激活,我们可以在凭据区域中看到服务帐户。 当我们使用参数 和 调用https://www.googleapis.com/admin/director

  • 我有一个谷歌办公套件电子邮件地址example@gmail.com我创建了一个谷歌服务号example-sa@iam.gserviceaccount.com。 我的目标是从这个SA发送电子邮件,就像它是电子邮件一样,但我无法验证SA。 不过,我可以使用以下代码登录服务帐户Google Drive: 然而,当我尝试为gmail做同样的事情时,我得到了一个错误: 错误: 如果我点击错误消息中提供的UR

  • 我们正在整合谷歌日历和我们的房间预订系统。GSuite域中的用户应该登录我们的预订屏幕并预订房间。到目前为止,我使用了一个具有域范围委托的服务帐户来模拟用户(< code>setSubject()方法,传递被模拟用户的电子邮件地址)。一切都正常,尽管这样我们无法验证我们想要模拟的用户是否成功登录,事件将只是以他作为组织者来创建,因为setSubject()只需要电子邮件正常工作。在IBM Domi

  • 问题内容: 我正在尝试访问Googles Contacts API,但由于获得授权而失败。从其他(网络)语言开始,我习惯于使用API​​Console和公共API密钥(授权)。 这样,我不能够刷新令牌并不能确定如何使用公共密钥的accessToken ......相反,我尝试了一个服务帐户: 这是我的例外: 谢谢提示! 问题答案: 不调用我的代码就可以很好地工作。但是您只会拥有一个模拟帐户(ser