目录API users.list使用服务帐户

时间:2018-01-02 20:53:08

标签: google-admin-sdk google-api-nodejs-client google-directory-api

我尝试使用服务帐户以编程方式使用管理员API创建用户。

服务帐户已被授予域范围的授权,并且已获得具有https://www.googleapis.com/auth/admin.directory.user范围的管理员的授权。

作为概念证明,我尝试使用以下代码简单地列出我们域中的所有用户:

const google = require('googleapis');
const KEY = require('./mykey.json');

function connect() {
  return new Promise((resolve, reject) => {
    const jwtClient = new google.auth.JWT(
      KEY.client_email,
      null,
      KEY.private_key,
      ['https://www.googleapis.com/auth/admin.directory.user'],
      null
    );

    jwtClient.authorize((err) => {
      if(err) {
        reject(err);
      } else {
        resolve(jwtClient);
      }
    });
  });
}

function listUsers(client) {
  return new Promise((yep, nope) => {
    google.admin('directory_v1').users.list({
      auth: client,
      domain: 'mydomain.com',
    }, (err, response) => {
      if (err) {
        return nope(err);
      }
      return yep(response);
    });
  });
}

这是在Firebase Cloud Function的上下文中完成的,如下所示:

function getAllUsers() {
  return connect().then((client) => (listUsers(client)));
}

exports.getAllUsers = functions.https.onRequest((req, res) => {
  getAllUsers().then((users) => {
    res.status(200).send(users);
  }).catch((err) => {
    res.status(500).send(`Something went wrong :: ${err}`);
  });
});

当我在不模仿用户的情况下对请求进行身份验证时,出现Not Authorized to access this resource/api错误。当我在模仿管理员用户(上面的null方法中的第二个connect())时对请求进行身份验证时,出现错误Client is unauthorized to retrieve access tokens using this method.

我已经将所有文档都跟到了T,我发现的每个相关答案似乎都指向"域范围的授权"没有被启用,这肯定是。

感谢任何帮助......

0 个答案:

没有答案