Gmail API 突然停止使用 [错误:unauthorized_client]



在我工作的地方,我们使用Google Apps for Work。在过去的 9 个月中,我们一直在使用 Gmail API(每天 ~2,000 个请求)为我们的支持电子邮件帐户提取新电子邮件。

这是我们最初设置它的方式:

  1. 转到 https://console.developers.google.com/project/
  2. 单击项目(或创建一个新项目)
  3. 点击 API 和身份验证
  4. 单击凭据
  5. 单击创建新的客户端 ID
  6. 点击服务帐户
  7. 下载帐户的 JWT (json)。
  8. 按照节点.js快速入门指南为同一帐户提供已安装/本机类型令牌,并通过控制台对其进行授权。除非我们执行此步骤,否则 JWT 令牌不起作用,每个帐户一次。

我们为每个单独的支持电子邮件帐户执行此操作,以避免在管理控制台中为其中任何一个帐户启用全网域授权。然后,我们能够使用官方支持的npmgoogleapis对令牌进行身份验证,类似于以下内容:

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
    });
});

就像我说的,我们用了很长时间,从来没有遇到任何问题。昨天上午 10 点左右,MST 每个帐户都无法同时进行身份验证,jwtClient.authorize()突然返回错误[Error: unauthorized_client]

我尝试在新服务帐户上使用新令牌做同样的事情(获取令牌的 Web 界面在过去 9 个月中发生了很大变化),它返回了相同的错误。

我们使用的googleapis版本是 0.9.7 ,但我们也无法让 JWT 身份验证在最新版本上运行。

我们向 Google API 支持团队开了一张票,但我们与之交谈的支持人员以前从未阅读过 Gmail API 规范,最终无法帮助我们,因此他将我们重定向到此处,以便与 API 工程支持团队取得联系。

我们注意到,如果我们在管理控制台中启用全网域委派的范围,身份验证会起作用,但我们不希望这样做。我们不需要模拟帐户,而是希望为每个帐户使用单独的 JWT。

事实证明,我们使用的身份验证流从未受到支持,并且可能由于Google的错误修复而被破坏。

在问题中,Jewett-Hall 和 @Steve Bazyl @Brandon建议我们改用已安装的应用程序身份验证流程,因为它允许无限期刷新访问令牌并且受支持。

有关不同身份验证流的更多信息,请参阅 Google API 文档。

相关内容

最新更新