从Apps脚本验证服务帐户

时间:2018-09-12 21:48:59

标签: google-apps-script google-api google-oauth service-accounts google-groups-api

我正在尝试使用API​​将成员添加到组中。我正在使用Google脚本工具进行编码,但是却收到错误消息:

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

我已经在G SUITE域中添加了范围,我已经创建了服务帐户,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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

在通过Google脚本进行编码时,我发现了具有所需功能的服务。它称为目录,位于Google的Admin 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);

    }
  }
}

无需身份验证,无需休息!