【问题标题】:Error: Client is unauthorized to retrieve access tokens (ServiceAccountCredentials) nodejs错误:客户端未经授权检索访问令牌(ServiceAccountCredentials)nodejs
【发布时间】:2018-08-07 01:28:55
【问题描述】:

我一直在尝试创建一个应用来使用服务帐户列出给定用户的所有 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);
      }
    }
  });
}

【问题讨论】:

    标签: google-api google-oauth gmail-api google-api-client google-api-nodejs-client


    【解决方案1】:

    客户端未经授权无法检索访问令牌。

    当您在 Google Developer Console 上创建了错误类型的凭据时,通常会发生此错误。您说您使用的是服务帐户,请确保您已从中下载正确的 json 文件。在那之后,凭证和用于使用它们的代码是不同的。您不能使用来自浏览器的代码的服务帐户的凭据,您将收到此错误。

    我不是节点开发人员,但我发现了这个

    http://isd-soft.com/tech_blog/accessing-google-apis-using-service-account-node-js/

    您可能希望首先尝试让服务帐户与驱动器一起使用。然后,当工作转移到 gmail 域委派时,使用 gmail 和服务帐户可能会很棘手,有时最好有一个您知道可以构建的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 2019-04-25
      • 1970-01-01
      • 2019-01-27
      • 2019-08-14
      • 2017-08-04
      • 1970-01-01
      相关资源
      最近更新 更多