在Node.js中使用Google API:避免重复授权

问题描述

我正在尝试构建一个API,该API要求每次收到请求时都要查看我的Google日历(而不是发送请求的用户的日历)。我的API应该能够响应用户的请求,而无需要求我一次又一次地进行身份验证。该API当前托管在Heroku上。

为此,我正在关注Quickstart项目。访问令牌存储在该项目的struct A<'a> { borrow: &'a mut u8,} /// We add the relation 'b: 'c fn does_nothing<'b: 'c,'c>(a: &'b mut A<'c>) { a.borrow = a.borrow; } 文件中。我不了解该项目如何处理访问令牌的过期。在此快速入门项目中,我无法确定刷新访问令牌并将其重写为token.json的地方。我们只会在第一次创建token.json文件时写入它,此后再也不会写入。该项目到期后如何刷新访问令牌?

我也无法确定应该将token.json文件存储在哪里。我尝试手动授权API,然后将获得的令牌作为环境变量存储在heroku上。昨天工作正常,但今天给出token.json,我认为令牌已经过期。如何确保每次用户向HTTP发送API请求时,API都不需要我方的重复授权?

解决方法

您可以通过Google云端IAM和管理员创建服务帐户并生成service-key.json文件: screenshot of where IAM & Admin can be found

然后,您可以在代码中使用服务帐户进行授权:

import {google} from 'googleapis';

const initAuth = async () => {
  const auth = new google.auth.GoogleAuth({
    keyFile: './service-key.json',//path to service-key.json
    scopes: ['https://www.googleapis.com/auth/drive'],//any auth scopes
  });

  const authClient = await auth.getClient();
  google.options({auth: authClient});
};