无用户自动服务器到服务器 Oauth2 2 腿身份验证到 Gmail

Userless Automated server to server Oauth2 2 legged authentication to Gmail

我发现了很多关于使用用户授权步骤实施 Oauth2 的信息,但我正在尝试 运行 一个自动抓取 gmail 收件箱附件的容器转换它们,并导出到普罗米修斯,我无法弄清楚如何实现这个库:https://pkg.go.dev/golang.org/x/oauth2/clientcredentials#Config 或任何其他与此相关的检索令牌而不涉及手动用户步骤。

在 Go 中执行此操作是否需要编写直接 API 调用,因为我找不到现有的库来处理这种情况?创建 Google 应用程序密码并使用通用 user/pass SMTP 身份验证是否更有意义?

首先我明白你想做什么。

您在容器中有一个后端系统 运行,它将访问单个 gmail 帐户并处理电子邮件。

现在您需要了解您正在使用的 API 的局限性。

有两种类型的授权用于访问私人用户数据

  1. 服务帐户 - 服务器到服务器的交互仅适用于工作区域。无需授权弹出窗口。
  2. Oauth2 - 授权普通用户 gmail 帐户,需要用户交互来授权同意屏幕

如果您没有工作区帐户并且这是普通的 gmail 用户,那么您别无选择,您必须使用 Oauth2,这将要求用户至少对应用程序授权一次。

使用 Oauth2,您可以请求离线访问并接收一个刷新令牌,您可以随时使用它来请求新的访问令牌。问题是您的应用程序需要投入生产并经过验证,因为您的刷新令牌只能工作 7 天,然后就会过期。要解决这个问题并获得一个不会过期的刷新令牌意味着您的应用程序必须在生产中并经过验证。这意味着您需要通过受限 gmail 范围的 Google 验证流程,这需要第三方安全检查,费用在 15k - 75k 之间,具体取决于您的应用程序。

我知道这是一个单用户系统,但这并不意味着您仍然需要通过验证。当 google 添加应用程序验证的需要时,他们没有考虑像您这样的单用户系统。

选项

您是否考虑过直接通过 SMPT 服务器而不是使用 Gmail api?如果您使用应用程序密码,您应该通过使用登录名和 apps password.

登录来绕过所有内容