我一直在尝试使用服务帐户创建一个应用程序来列出给定用户的所有gmail标签。 服务帐户具有域范围的委派,并且当我运行此脚本“客户端未经授权检索访问令牌”时出现错误。
var {google} = require('googleapis');
const SCOPES = [
'https://www.googleapis.com/auth/gmail.readonly'
];
var emailToLoginWith = 'useremail@anydomain.com';
var key = require('json_key_file_name.json');
var jwtClient = new google.auth.JWT(
key.client_email,
null,
key.private_key,
SCOPES,
emailToLoginWith
);
jwtClient.authorize( function (err, tokens) {
if (err) {
console.log(err);
return;
}
console.log('tokens : ', tokens);
listLabels(jwtClient);
});
function listLabels(auth) {
var gmail = google.gmail({version: 'v1', auth: auth });
gmail.users.labels.list({
userId: 'user_id',
}, function(err, response) {
if (err) {
console.log('The API returned an error: ' + err);
return;
}
console.log('labels response', response);
var labels = response.labels;
if (labels.length == 0) {
console.log('No labels found.');
} else {
console.log('Labels:');
for (var i = 0; i < labels.length; i++) {
var label = labels[i];
console.log('- %s', label.name);
}
}
});
}
答案 0 :(得分:0)
客户未经授权检索访问令牌。
在Google Developer Console上创建了错误类型的凭据时,通常会发生此错误。您说您正在使用服务帐户,请确保您已从中下载了正确的json文件。在那之后,凭证和用于使用它们的代码是不同的。您无法使用来自浏览器代码的服务帐户的凭据,您将收到此错误。
我不是节点开发人员,但我发现了这个
http://isd-soft.com/tech_blog/accessing-google-apis-using-service-account-node-js/
您可能希望首先尝试使用驱动器帐户。然后,当有效的方式转移到gmail域名授权与Gmail和服务帐户可能是棘手的有时最好有一个你知道可以建立起来的例子。