Gmail API 的访问令牌过期和创建

Gmail API's access token expiration and creation

我一直在使用 google API 从我的 node.js 项目中的服务器发送电子邮件。 我已经设置了凭据并创建了刷新令牌和访问令牌,并且像这样使用了超过 6 个月。

oAuth2Client = new google.auth.OAuth2(client_id, client_secret, redirect_uris);
oAuth2Client.setCredentials({ refresh_token, access_token, scope, expiry_date });
gmail = google.gmail({ version: 'v1', oAuth2Client });
gmail.users.messages.send({ /* email details */ });

我发送的 expiry_date 是我第一次创建令牌时收到的,所以日期是过去的日期(超过 6 个月)。

我记得读过访问令牌会在一段时间后过期,但我不确定我的 access_token 何时过期或者我将如何创建一个新的。 我的电子邮件仍在发送中,所以我有点困惑为什么它还没有停止工作。

所以我的问题本质上是

  1. 如何知道我的 access_token 何时到期。
  2. 一旦它过期,我该如何创建一个新的。虽然第一次设置所有这些我记得是在操场上做的,但如果可以的话,我更愿意在服务器代码本身中设置 access_token 创建过程。

访问令牌一小时后过期。知道它是否已过期的最好也是唯一的方法是在访问令牌已过期时尝试它 API 将 return 给你一个错误。

另一方面,刷新令牌大部分不会过期。您的代码很可能会在需要时正确使用刷新令牌来请求新的访问令牌。此功能内置于 Google api js 客户端库中,您无需考虑。

刷新令牌如何过期

  1. 用户可以通过他们的 Google 帐户删除您的访问权限。
  2. 如果访问令牌在六个月内未使用 google 将自动过期。
  3. 如果您向用户请求授权(显示同意屏幕),您将获得一个刷新令牌。如果您再次这样做,您将获得另一个刷新令牌,两者都可以使用。一旦您达到该标记,您最多可以为给定用户拥有五十个未完成的刷新令牌,第一个将过期。
  4. 几年前的一个奇怪的错误,当夏令时到达时,很多 Google 刷新令牌由于一些奇怪的错误而自动过期,自从 :)