如何在不需要用户干预的情况下执行G Suite域范围授权委派?

5
我们的应用程序需要访问与Gsuite帐户相关的所有Gmail邮箱。我可以通过按照https://developers.google.com/admin-sdk/reports/v1/guides/delegation上的说明手动创建服务账号密钥,在凭据上启用域宽代理并在G Suite管理区域手动分配适当的权限来实现此目标。这似乎对于每个客户手动设置都有效,但是该过程复杂而繁琐,并且是采用的障碍。
为了实现一键注册流程,按照G Suite市场的要求,我创建了一个OAuth客户端ID(而不是服务账号),并使用此凭据将用户重定向通过同意流程作为注册流程的一部分。然后,使用刷新/访问凭据访问G Suite API。这个方法很好,但我只能访问已登录用户的邮箱(而不是域中其他任何人的邮箱)。客户端ID凭据似乎没有域宽代理可用。
我知道服务账号凭证有客户端ID,但它们不允许指定可接受的重定向URI。因此,使用服务账号实现同意流程似乎不可能。
我的应用程序已在Chrome商店注册。如何创建凭据,使用同意流程接受权限,并仍然享有域宽代理的好处?

Office 365具有域管理员通过同意流程授权整个域特定范围访问权限的能力。Google Apps似乎没有相应的功能。据我所见,似乎必须使用服务帐户进行委派访问,并且期望Google Apps管理员遵循复杂的过程来添加范围。有人可以确认这一点吗?我希望有一个一键设置过程。 - jamie
1个回答

6
似乎我需要两个凭证。
1)Google用户验证——客户端ID凭证(使用密钥)
2)Gmail API的访问——启用委托权限的服务帐户凭据(使用私钥)
1)中的客户端ID凭证适用于代表用户进行身份验证或进行API调用(前提是获得了同意)。但是,当访问多个邮箱时,该凭证将无法工作。在这种情况下,需要服务帐户凭据(上述第2点)。
使用服务帐户凭据时,仍然需要从用户处获取访问特定API范围的权限。这些权限/OAuth作用域在Google Marketplace SDK配置中指定。
转到Google Cloud Platform->API和服务Daskboard->单击启用API和服务->在搜索框中键入Google Marketplace SDK->选择Google Marketplace SDK->单击管理。在配置选项卡中添加所需的作用域。
G Suite管理员会在Google Marketplace内部提示授权权限,在初次访问应用程序时。与Office 365不同,同意流程不通过同意重定向处理。必须首先从Google Marketplace内部访问该应用程序,以分配正确的委派权限。

2
请问您能否再澄清一下?您是通过Oauth流程获得G-suite管理员用户的同意,从而能够访问所有用户的邮箱,还是管理员用户仍然需要手动创建服务帐户并与您共享密钥?感谢您的分享。 - Nad
我找不到获取管理员授权的方法,除非他前往admin.google.com并指定我的应用程序ID和所需的范围。 - Guilherme
据我所记,您需要在Google应用市场注册您的应用程序。在我们的注册过程中,我们会重定向到GSuite Marketplace,那里有一个安装按钮。当用户点击安装按钮时,他们将经历同意过程。与我更喜欢的Office 365流程不同,同意流程必须通过Gsuite Marketplace进行,以便应用程序具有足够的特权来访问与公司关联的所有邮箱。 - jamie
请参见:https://developers.google.com/gsuite/marketplace/sdk#enabling_the_marketplace_sdk - jamie
1
@Jamie,在Marketplace同意后会发生什么?它会调用redirect_uri吗?它如何通知您的服务器授权/安装成功?服务器如何获取服务帐户凭据以进行“离线”访问? - maxbeaudoin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接