【问题标题】:Can Firebase Cloud Functions use OAuth2 with gmail?Firebase Cloud Functions 可以将 OAuth2 与 gmail 一起使用吗?
【发布时间】:2018-09-27 01:12:00
【问题描述】:

根据https://github.com/firebase/functions-samples/blob/master/email-confirmation/README.md

要能够使用您的 Gmail 帐户发送电子邮件:启用对安全性较低的应用程序显示解锁验证码的访问。对于启用两步验证的帐户生成应用密码

查看节点邮件程序的文档,通过 Gmail SMTP 发送电子邮件的最安全方式似乎是http://nodemailer.com/smtp/oauth2/

我的问题是,假设我按照send emails from MY gmail account with OAuth2 and nodemailer 的建议收集了执行 OAuth2 所需的所有字段,那么 OAuth2 方法是否与 Cloud Functions 不兼容?

是否需要refreshToken 在每次调用时生成一个新的accessToken?这肯定会增加成本,因为云功能需要更长的时间才能运行,对吗?

这就是 github 仓库中的 firebase 函数示例故意不包含也不提及更安全的 OAuth2 方法的原因吗?

【问题讨论】:

    标签: firebase google-cloud-functions gmail-api google-oauth nodemailer


    【解决方案1】:

    可以将 OAuth 与 Cloud Functions 一起使用。您可以查看this link 了解更多信息,但这里有一个小摘要:

    首先,您需要配置一个 OAuth 客户端 ID,以便与 Gmail API 一起使用。启用 API 并选择区域后,转到 Cloud Console 并根据您正在开发的功能创建适当的凭据。它应该包括应用程序类型、客户端名称和一些授权的 JavaScript 来源,如上面的链接所示。这将为您提供一个您应该安全存储的客户端密码。

    您还需要根据您在控制台中应用的设置配置一些文件,例如index.jspackage.json,并使用之前的配置重命名您收到的客户端密码。将正确的项目和区域添加到文件后,就可以进行部署了,使用链接中包含的命令部署功能,在 index.js 文件所在的同一目录中启动部署。

    至于每次调用都需要使用刷新令牌来生成新的访问令牌,这将取决于访问令牌何时设置为过期,或者您何时认为您当前的访问令牌不安全。可以在您认为合适的任何时候使用刷新令牌,但只要访问令牌有效,就不能每次调用该函数。

    费用会因您在一个月内执行的调用次数而异,其中前 200 万次免费,而计算时间成本可能因使用的内存和 CPU 量而异。 Here 您可以查看 Cloud Functions 当前的定价方式。据我所知,使用刷新令牌更新访问令牌等操作似乎对成本没有太大影响。

    我解释的所有这些都与 Cloud Functions 相关,而不是 Firebase。我不熟悉 Firebase 的使用,但我认为由于函数示例旨在尽可能简单,它们将包含一种更简单的身份验证方式。无论如何,您可以自己添加 OAuth 选项,如您在 Firebase documentation 中所见。

    我希望所有这些都能帮助您了解如何将 OAuth 与 Cloud Functions 结合使用。

    【讨论】:

    • 谢谢!我担心的是在几乎每次调用时刷新令牌和调用 restful api 需要额外的 cpu 时间。因此,我现在使用普通用户名/密码并启用了不太安全的应用程序,因此云功能可以直接处理 smtp 服务器,这应该更快。
    • 我想解决您的担忧和评论,您不必担心额外的 CPU 时间。如您所见here,有关令牌的身份验证过程不会发生在实例级别,因此 CPU 时间不受这些操作的影响,您得到的最多只会对端到端延迟产生很小的影响。您可以继续保持当前配置,但如果您尝试 OAuth 方法,请告诉我。
    • 我一直认为'延迟'也计入cpu时间。
    • 正如我在最新评论中提供的链接中所解释的那样,额外的保护层可能会产生小的端到端延迟影响,但这并不重要,因为身份验证发生在实例之外水平。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 2013-11-24
    • 2017-10-03
    • 2017-07-31
    • 1970-01-01
    相关资源
    最近更新 更多