我尝试使用服务帐户以编程方式使用管理员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,我发现的每个相关答案似乎都指向"域范围的授权"没有被启用,这肯定是。
感谢任何帮助......