如何使用用于 Node JS 客户端的 Google Apis 处理刷新令牌?

How to handle Refesh-Tokens with GoogleApis for NodeJS Client?

我正在查看以下文档: https://github.com/googleapis/google-api-nodejs-client#handling-refresh-tokens

特别是这部分:

oauth2Client.on('tokens', (tokens) => {
  if (tokens.refresh_token) {
    // store the refresh_token in my database!
    console.log(tokens.refresh_token);
  }
  console.log(tokens.access_token);
});

我不明白的是为什么我应该将刷新令牌存储在数据库中。 是因为刷新令牌只在第一次授权时提供给我吗? 但即便如此,这不应该意味着这部分:

oauth2Client.setCredentials({
  refresh_token: `STORED_REFRESH_TOKEN`
});

应该替换上面的注释(// 将 refresh_token 存储在我的数据库中!)? A.K.A:

oauth2Client.on('tokens', (tokens) => {
  if (tokens.refresh_token) {
    oauth2Client.setCredentials({
  refresh_token: tokens.refresh_token
  });
});

这是由于 Google 在文档中的声明: “如果该库即将过期,它将自动使用刷新令牌来获取新的访问令牌”。

我想要构建的是一个应用程序,人们可以在其中使用他们的 Google-帐户登录,然后可以使用我利用 f.e Google-analytics [=31 构建的多个分析工具=].

我已经通过文档设法设置了一个有效的访问令牌,但我对这个主题真的很感兴趣,真的很想学习刷新部分,但我真的很难理解它。如果有人能帮助我理解,我将非常感激。如果没有,有人可以指出我在其他地方对此(对于 nodejs)的一个很好的解释吗? :)

刷新令牌的存在是为了在安全性和用户体验之间保持平衡。 访问令牌应为 short-lived (read more about access token lifetime),以防恶意攻击者访问它。如果没有刷新令牌,您将需要每次都请求用户授权。

刷新令牌应存储在 safe place

Save refresh tokens in secure long-term storage and continue to use them as long as they remain valid.

当您调用 oauth2Client.setCredentials 时,您正在初始化 SDK,因此它可以使用刷新令牌获取新的访问令牌,但 SDK 不会存储任何 long-term 存储中的刷新令牌。那是你的申请责任。

请注意,刷新令牌也可以被撤销,以防它被泄露或六个月未使用(对于 Google API)。此外,定期轮换刷新令牌是一种很好的安全做法。

您的应用程序也有责任处理该部分,您可以阅读有关刷新令牌过期的更多信息here