bri*_*uth 5 google-api jwt service-accounts google-api-nodejs-client gmail-api
在我工作的地方,我们使用Google Apps for Work.在过去9个月中,我们一直在使用Gmail API(每天约2,000个请求)为我们的支持电子邮件帐户提取新电子邮件.
这就是我们最初的设置方式:
我们为每个支持电子邮件帐户执行此操作,以避免在管理控制台中为其中任何一个启用域范围委派.然后,我们可以使用官方支持的npm库对令牌进行身份验证googleapis,类似于:
var google = require('googleapis');
var jwtClient = new google.auth.JWT(
token.client_email,
null,
token.private_key,
['https://www.googleapis.com/auth/gmail.readonly'],
'supportemail@mycompany.com'
);
jwtClient.authorize(function(err, tokens) {
if (err) {
return cb(err);
}
var gmail = google.gmail('v1');
var requestOptions = {
auth: jwtClient,
userId: 'me',
id: messageId,
format: 'raw'
};
gmail.users.messages.get(requestOptions, function(err, response) {
if (err) {
return cb(err);
}
// do stuff with the response
});
});
Run Code Online (Sandbox Code Playgroud)
就像我说的,我们使用了很长时间,从来没有任何问题.昨天早上10点左右,每个帐户都停止了能够同时进行身份验证,并jwtClient.authorize()突然返回错误[Error: unauthorized_client].
我尝试在新服务帐户上使用新令牌执行相同的操作(在过去9个月内获取令牌的Web界面已经发生了很大变化),并且它返回相同的错误.
googleapis我们使用的版本是0.9.7,但我们无法让JWT身份验证在最新版本上运行.
我们打开与谷歌API的支持团队票,但与我们交谈的支持人员从未阅读Gmail API规范之前,是最终无法帮助我们,所以他为了取得联系与重定向到这里我们的API工程支持团队.
我们注意到,如果我们在管理控制台中启用域范围委派的范围,则身份验证有效,但我们不希望这样做.我们不需要冒充帐户,而是希望为每个帐户使用单独的JWT.
事实证明,我们使用的身份验证流程从未受到支持,并且可能由于 Google 方面的错误修复而被破坏。
在问题评论中,@Brandon Jewett-Hall和@Steve Bazyl建议我们使用已安装的应用程序身份验证流程,因为它允许无限期刷新访问令牌并且受支持。
有关不同身份验证流程的更多信息可以在Google API 文档中找到。
| 归档时间: |
|
| 查看次数: |
1443 次 |
| 最近记录: |