GoogleAPIs for Node.js,如何在没有浏览器和人机交互的情况下在服务器上创建oauth2用户

GoogleAPIs for Node.js,如何在没有浏览器和人机交互的情况下在服务器上创建oauth2用户,node.js,oauth-2.0,google-api,Node.js,Oauth 2.0,Google Api,问题是: 我正在创建一个简单的后台应用程序,它将检查我的谷歌日历帐户上的一些东西。我希望它每周运行一次api调用 日历api需要使用oAuth2。我发现的所有示例都需要人员交互流程: 运行方法 服务器要求用户在特殊url上打开浏览器并复制显示在那个里的代码 用户这样做并将代码粘贴到控制台中 服务器验证它并将令牌保存到某个文件中 服务器执行日历api调用 问题是我不想每周都这么做。我希望它只进行一次身份验证,然后在无人值守的情况下运行 一种方法是将tokenexp date设置为超过1周,然后在每

问题是:

我正在创建一个简单的后台应用程序,它将检查我的谷歌日历帐户上的一些东西。我希望它每周运行一次api调用

日历api需要使用oAuth2。我发现的所有示例都需要人员交互流程:

  • 运行方法
  • 服务器要求用户在特殊url上打开浏览器并复制显示在那个里的代码
  • 用户这样做并将代码粘贴到控制台中
  • 服务器验证它并将令牌保存到某个文件中
  • 服务器执行日历api调用
  • 问题是我不想每周都这么做。我希望它只进行一次身份验证,然后在无人值守的情况下运行

    一种方法是将tokenexp date设置为超过1周,然后在每次调用时刷新它。但在某些情况下,这无法恢复连接(例如断电)

    到目前为止,我尝试的是: 显然是我开始的。它工作了,但我不得不使用浏览器

    然后我发现。但默认情况下,JWT不适用于日历。或许我做错了:

    private async initApiKey() {
        const client = await auth.getClient();
        const calendar = await google.calendar({version: 'v3', client});
        const events = await calendar.events.list({
          calendarId: 'primary',
          timeMin: (new Date()).toISOString(),
          maxResults: 10,
          singleEvents: true,
          orderBy: 'startTime',
        });
        return client;
      }
    
    google.calendar
    应该传递给oauthclient,这里的
    client
    是JWTClient。我想我可以强制oAuth,但它会强制浏览器(它甚至使用opn)


    如何执行此操作?

    如果您想代表用户(甚至您自己的用户)发出请求,则必须获得oauth令牌

    JWToken用于服务帐户,这些帐户不是实际用户,也没有日历。这些帐户代表谷歌云项目或其他类型的对象执行API操作


    OAuth的目的是让用户提供明确的同意,允许在google应用程序中注册的服务器代表他们进行API交互。您需要通过浏览器OAuth来获取令牌。刷新令牌可以在很久以后使用,以保持该令牌的新鲜。您可以存储这些令牌,并在断电或其他重启事件后刷新

    好的,我明白了。什么是可能阻止令牌刷新和断开连接的危险?对于文档中的信息,刷新令牌的有效时间可能有限制。它通常足够长,你不必每天做一次以上,甚至可以长达一周。我不确定。