具有未经授权的DwD的GSuite服务帐户,用于访问用户的Gmail帐户

时间:2019-09-03 15:39:16

标签: node.js rest google-cloud-platform gsuite google-api-nodejs-client

我有一个启用了域范围委派的G Suite服务帐户,并且我想模拟域中的用户。但是,我的每一次尝试都遇到一个错误,说我未经授权。有没有人经历过这种情况并且可能知道发生了什么事?

我也遵循thesethese的说明。我创建了一个新的服务帐户,(如上所述)启用了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.

据我所知,应该授权服务帐户模拟域中的用户。有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

最后,是我愚蠢。在管理控制台中,我一直在用空格分隔作用域,但实际上应该用逗号分隔:“ https://mail.google.com,https:// ...”