Google Gmail API - 常规或服务帐户

Posted

技术标签:

【中文标题】Google Gmail API - 常规或服务帐户【英文标题】:Google Gmail API - regular or service account 【发布时间】:2020-12-20 06:26:36 【问题描述】:

我们正在.NET Core 3.1 中开发一个内部应用程序。其中一项要求是应用程序的所有用户都必须能够查看作为 GSuite 一部分的预定义 Gmail 帐户(例如test@company.com)中的邮件数量。这意味着每个登录到应用程序的用户都能够看到这些信息,而无需任何额外的谷歌登录或类似的东西。应用程序应该能够在没有用户交互的情况下访问电子邮件,只使用代码。

阅读文档后,我注意到有两种类型的帐户 - 普通帐户和服务帐户。我有以下问题:

    哪种账户类型适合我们的场景?我倾向于使用服务帐户。 我需要做什么才能访问来自test@company.com 的电子邮件?我是否需要登录此帐户、启用 Gmail API、创建服务帐户、下载凭据并在我们的应用程序中使用它们? Gsuite 管理员还需要做其他事情吗? 服务帐户是否适用于非 GSuite 电子邮件?我想在我创建的随机帐户上测试代码(例如abc123@gmail.com)?

【问题讨论】:

【参考方案1】:

您需要 gsuite 管理员为您的服务帐户设置域范围的委派,以便能够访问域中用户的电子邮件帐户。服务帐号不适用于非 gsuite 域的电子邮件。

GoogleCredential credential;
using (var stream = new FileStream(serviceAccountCredentialFilePath, FileMode.Open, FileAccess.Read))
      
      credential = GoogleCredential.FromStream(stream).CreateScoped(scopes);
      

【讨论】:

应该管理员 (admin@company.com) 创建一个服务帐户,还是可以从 test@company.com 帐户创建它?我可以将服务帐户限制为只能访问来自test@company.com 的电子邮件吗? 您可以创建服务帐户。管理员将需要为您提供域范围的委派。您将有权访问该域的所有电子邮件,他们无法对其进行限制。 管理员至少可以限制服务帐户可以执行的操作吗?例如,他/她可以禁用删除电子邮件吗? 没有服务帐户可以完全访问域上的电子邮件,所有用户。 如果我们希望向我们应用程序的所有用户显示test@company.com 收件箱中的电子邮件信息,而无需他们使用 Google 登录,那么服务帐户是唯一的选择吗?

以上是关于Google Gmail API - 常规或服务帐户的主要内容,如果未能解决你的问题,请参考以下文章

Google 工作区:通过 API 激活 gmail

使用 Gmail API 时的网络流量收费

我们可以使用服务帐户访问 GMAIL API 吗?

Google API (Gmail) 因失败的前提条件 400 而失败

Gmail API - Oauth2/google:找不到凭据(Golang)

使用 Java 的 API 将已删除的消息插入到 gmail