如何在没有用户干预的情况下执行 G Suite 全域授权?

How to perform G Suite domain-Wide delegation of authority without user intervention?

我们的应用需要访问与 Gsuite 帐户相关的所有 Gmail 邮箱。我可以按照 https://developers.google.com/admin-sdk/reports/v1/guides/delegation 中的说明完成此操作。即手动创建服务帐户密钥,在凭证上启用全域委托并在 G Suite 管理区域中手动分配适当的权限。当为我们的每个客户手动设置时,这似乎可行,但是,该过程复杂且繁琐,并且是采用的障碍。

为了尝试实现一键式注册流程,根据 G Suite 市场的要求,我创建了一个 OAuth 客户端 ID(而不是服务帐户),并使用此凭据通过同意流程重定向用户,作为一部分注册过程。此后,使用 refresh/access 凭据访问 G Suite API。这非常有效,除了我只能访问登录用户的邮箱(不能访问域中的任何其他人)。域范围的授权似乎不适用于客户端 ID 凭据。

我知道服务帐户凭据有一个客户端 ID,但它们不允许指定可接受的重定向 URI。因此,使用服务帐户似乎无法实施同意流程。

我的应用已在 Chrome 商店注册。如何创建凭证、使用同意流程接受权限,并且仍然享受域范围委托的好处?

看来我需要两个凭据。

1) Google 用户身份验证 - 客户端 ID 凭据(使用秘密)

2) Gmail API 的访问权限 - 启用委托权限的服务帐户凭据(使用私钥)

1) 中的客户端 ID 凭据适用于身份验证或代表用户进行 API 调用(前提是已获得同意)。但是,当访问多个邮箱时,凭据将不起作用。在这种情况下,需要服务帐户凭据(上面的 2)。

使用服务帐户凭据时,仍然需要获得用户的许可才能访问特定的 API 范围。这些 permissions/OAuth 范围在 Google Marketplace SDK 配置中指定。

转到Google Cloud Platform -> API's & Services Daskboard -> 单击启用 API's And Services -> 在中输入 Google Marketplace SDK搜索框 -> Select Google Marketplace SDK -> 点击管理。在配置选项卡中,添加所需的范围。

G Suite 管理员在 Google Marketplace 中收到提示,以便在首次访问应用程序时允许范围内的权限。与 Office 365 不同,同意过程不是通过同意重定向处理的。该应用程序必须最初从 Google Marketplace 中访问,以便分配正确的委托权限。