我尝试将新的Gmail API与Google API Node client一起使用。我从开发者控制台创建了一个新项目,建立了一个新的"服务帐户"客户端ID,以及对API的启用访问权限。
作为概念证明,我只是想在我的收件箱中列出线程。当我为API explorer启用OAuth 2.0切换并输入我的电子邮件地址时,请求成功,我看到带有数据的JSON响应。
现在我尝试在Node中做同样的事情:
var googleapis = require('googleapis');
var SERVICE_ACCOUNT_EMAIL = '...SNIP...';
// generated by: openssl pkcs12 -in ...SNIP...p12 -out key.pem -nocerts -nodes
var SERVICE_ACCOUNT_KEY_FILE = 'key.pem';
var jwt = new googleapis.auth.JWT(
SERVICE_ACCOUNT_EMAIL,
SERVICE_ACCOUNT_KEY_FILE,
null,
['https://www.googleapis.com/auth/gmail.readonly']);
googleapis
.discover('gmail', 'v1')
.execute(function(err, client) {
jwt.authorize(function(err, result) {
if(err) console.error(err);
else console.log(result);
client.gmail.users.threads.list()
.withAuthClient(jwt)
.execute(function(err, result) {
if(err) console.error(err);
else console.log(result);
});
});
});
首先我打印authorize()
调用的结果,看起来它会返回一个令牌,所以我想我已经正确设置了所有OAuth:
{ access_token: '...SNIP...',
token_type: 'Bearer',
expires_in: 1404277946,
refresh_token: 'jwt-placeholder' }
然后我尝试实际使用API,但是我收到错误:
{ errors:
[ { domain: 'global',
reason: 'backendError',
message: 'Backend Error' } ],
code: 500,
message: 'Backend Error' }
此时,我不知道还有什么可以尝试。我认为 OAuth的工作正常,因为我没有收到任何身份验证错误。我也认为 API本身正在运行,我的帐户很好,因为我可以通过API Explorer使用它。我也没有看到任何关于Node库出错的迹象。简而言之,我不知道问题是什么。有什么想法吗?
答案 0 :(得分:0)
您正在使用服务帐户验证您对GMail的请求。据我所知,您的服务帐户没有Gmail,只有用户才有GMail。因此,您需要与用户(see here for example)进行OAuth2流程。