我有一个启用了域范围委派的G Suite服务帐户,并且我想模拟域中的用户。但是,我的每一次尝试都遇到一个错误,说我未经授权。有没有人经历过这种情况并且可能知道发生了什么事?
我也遵循these和these的说明。我创建了一个新的服务帐户,(如上所述)启用了DwD,并在管理控制台中添加了必要的范围: https://mail.google.com https://www.googleapis.com/auth/gmail.settings.sharing https://www.googleapis.com/auth/gmail.settings.basic https://www.googleapis.com/auth/admin.reports.audit.readonly
(也已验证域。)
从那里,我尝试使用以下代码在NodeJS客户端中授权此帐户:
const {google} = require('googleapis');
const fs = require('fs');
const auth = JSON.parse(fs.readFileSync('xxx.json'));
const jwt = new google.auth.JWT(
auth.client_email,
null,
auth.private_key,
[
'https://mail.google.com/',
'https://www.googleapis.com/auth/gmail.settings.sharing',
'https://www.googleapis.com/auth/gmail.settings.basic',
'https://www.googleapis.com/auth/admin.reports.audit.readonly'
],
'user@domain.com'
);
jwt.authorize((err, res) => {
if (err) console.log(err);
else console.log(res);
});
如果我删除了user@domain.com
并尝试在不假冒电子邮件的情况下进行授权,那么它会起作用;我收到访问令牌。但是,出于我的目的,我需要能够模拟,如果尝试这样做,则会收到带有以下消息的401:
GaxiosError: unauthorized_client: Client is unauthorized to retrieve access tokens using this method, or client not authorized for any of the scopes requested.
据我所知,应该授权服务帐户模拟域中的用户。有谁知道为什么会这样?
答案 0 :(得分:0)
最后,是我愚蠢。在管理控制台中,我一直在用空格分隔作用域,但实际上应该用逗号分隔:“ https://mail.google.com,https:// ...”