【问题标题】:Using nodemailer & Google OAuth to send email, working for 7 days, but get invalid grant使用 nodemailer & Google OAuth 发送邮件,工作 7 天,但获得无效授权
【发布时间】:2021-05-30 03:19:13
【问题描述】:

我一直在努力使用 nodemailer 为自动发送电子邮件的 node.js Web 应用程序设置 Oauth 通信。 (我不想使用 gmail 的不太安全的应用程序设置)。

我已采取措施从 oauth Playground 获取客户端 ID、机密和刷新令牌,并将网络应用设置为使用存储的刷新令牌在首次加载时请求新的访问令牌。

它能够发送电子邮件(大约 7 天),然后我在客户端收到错误无效状态代码 400,和/或在服务器端收到无效授权。

回到谷歌游乐场并获得另一个刷新令牌,然后在环境变量中更新它,再解决一周。但我想无限期地解决这个问题。

我读到了somewhere为外部用户类型配置了 OAuth 同意屏幕且发布状态为“测试”的 Google Cloud Platform 项目发出了一个在 7 天后到期的刷新令牌” ...所以上周我将应用程序切换到“生产中”(在 console.cloud.google.com)并尝试通过谷歌验证它。本周,同样的问题再次出现,表明这不是正确的解决方案,或者尚未通过 Google 验证。

我不知道这是否正确完成,也不知道这是否是解决此过期/撤销刷新令牌或无效授权的真正解决方案。

我也遇到过这些解释

用户已撤销您应用的访问权限。

刷新令牌已六个月未使用。

用户更改了密码,并且刷新令牌包含 Gmail 范围。

用户帐户已超过授予(实时)刷新令牌的最大数量。

如果客户端不是服务帐户,则客户端已达到每个帐户 50 个刷新令牌的限制。

(我在这一周内没有进行任何更改,所以...不知道为什么会更改)

问题是刷新令牌吗? 还是申请状态? 会是 dns/cname/cloudflare 服务器问题吗?

【问题讨论】:

  • 在您的手机或电视上登录几乎任何 Google 设备服务(YouTube、YouTube TV 等)。请注意您必须如何在几天(可能是一周)后重新进行身份验证。您需要设计您的应用程序来处理重新身份验证。恕我直言,随着 Google 加强 OAuth 的安全性,长期刷新令牌的日子已经结束。

标签: oauth-2.0 firebase-authentication google-oauth nodemailer refresh-token


【解决方案1】:

对于以后遇到同样问题的人: 事实证明,谷歌验证是没有必要的。 一周或 7 天后过期的刷新令牌似乎是由于放置了 oauth2Client.setCredentials() 函数调用和 accessToken 变量。

调用 setCredentials() 并在 SendEmail() 函数内部获取访问令牌(在运行时,就在发送电子邮件之前,而不是在应用程序启动/启动时)似乎使代码能够更动态地生成所需的令牌. 12 天后,它似乎仍然有效,所以我认为这是成功的。

我猜测为什么它以前不起作用是因为在函数之外设置凭据意味着代码只在服务器/应用程序启动时运行一次。然后它将获得的访问令牌存储在一个常量中。

访问令牌最终会过期,即使在函数内部再次/稍后调用以获取新的访问令牌,它也无法更改 const 属性/变量的值,因此调用将不可避免地失败一周后更新失败。

希望这可以帮助遇到类似问题的其他人。
我为连续的句子道歉。

【讨论】:

    【解决方案2】:

    无效授权的原因有很多,在我看来,您的刷新令牌即将到期。

    如果您在 google 开发者控制台上的项目仍在测试中,尚未移至已发布并且尚未通过 google 应用程序验证过程,则刷新令牌的最长有效期为两周,之后它们将过期,这可以解释您的无效授予。问题是谷歌没有官方消息表明这种情况正在发生,这正是现在许多开发人员所看到的。

    另一个是 gmail 范围,如果用户更改密码,这也会导致刷新令牌过期。

    【讨论】:

    • 我同意,但我读到刷新令牌不应该过期,尤其是不到一年。我的想法是它被撤销了,因为该应用程序未经谷歌验证,所以我现在正在经历这一步,看看它是否能修复它。 (只是将它推到“生产中”模式不会排队等待验证,我已经意识到)。关于 gmail 范围,我只尝试了完整范围和发送范围,据我所知,PW 没有改变。不过,我仍在努力,感谢您提供的信息。
    • 在您提到的情况下,未在测试中的已验证应用程序的刷新令牌不会过期。请记住,Gmail 范围的安全审核可能需要一些时间并且非常昂贵,如果您愿意分享,我很想知道它的成本和花费了多长时间。我正在尝试为所有开发人员编制一份关于验证的事实列表,因为谷歌没有给我们一个。
    • 有一些关于OAuth API verification on it's documentation的相关信息可以帮助您更好地了解这个过程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    相关资源
    最近更新 更多