来自云功能的永久身份验证

Permanent authentication from cloud function

我正在尝试在云函数中托管一些代码。此代码跟踪和解析新电子邮件并将一些信息写入实时数据库。它几乎 100% 完成了,但由于我是初学者,所以我很难处理身份验证。在我的 PC 上,当我像显示的那样进行身份验证时,一切正常 here。问题是保存有关我的登录信息的 token.json 文件是临时文件。一段时间后,需要将其删除,我必须重新登录。此登录过程是一个打开的浏览器选项卡,因此我可以选择我的 Google 帐户。

但是,我的云功能无法打开浏览器选项卡为我登录。因此它必须能够永远保持登录状态,或者在没有人为干扰的情况下执行登录过程。我觉得 Google 开发指南非常不清楚,至少对于像我这样没有经验的人来说是这样。这是我目前所拥有的示例:

scopes = ['https://www.googleapis.com/auth/gmail.readonly']
client_secret_location = 'credentials.json'

def authentication():
    global creds
    creds = None

    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', scopes)

    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file('credentials.json', scopes)
            creds = flow.run_local_server(port = 0)

        with open('token.json', 'w') as token:
            token.write(creds.to_json())

我想 creds 就像一个保存我的用户会话的对象。它允许我构建我的 Gmail API 并做所有我必须用它做的事情:

gmail_session = build('gmail', 'v1', credentials = creds)

但是,正如我所说,这个令牌会在几天后过期,需要重新登录。

要启用此 so-called server-to-server 身份验证,您需要一个服务帐户。 如果您的 GMail 帐户是 Google 工作区的一部分,您可以在此处找到创建此类服务帐户的说明: https://support.google.com/a/answer/7378726

如前所述: 不幸的是,此类服务帐户仅适用于 gsuite(工作区)域。