繁体   English   中英

服务帐户是否必须模拟用户才能访问目录 Api?

[英]Does a Service Account have to impersonate a user to access the Directory Api?

我想我可能误解了服务帐户在 GCP 中的工作方式,因为我不明白为什么(在我的情况下)他们需要模拟用户来完成任务。

我需要在我的应用程序上访问 Workspace Admin SDK API 中的一些信息(例如列出 chromeos devices )而不提示用户登录。我认为最好的方法是使用服务帐户来执行此操作,所以我可以将我的服务帐户的详细信息上传到我的应用程序,并且每次我需要一些数据时,它都会通过这个帐户进行。

我在 GCP 中创建了我的服务帐户,然后在 Google Workspace 中为其提供了具有所需范围的域范围委派。

起初在测试时我收到了 Forbidden 403 错误,因为我没有冒充任何用户。 一旦我开始模拟用户,我就能够从 API 获得所需的数据。 我还确认,当我删除域范围委派的一些范围时,我不再能够检索该数据。 这意味着当我冒充超级管理员时,我只能获取我提供的服务帐户范围的数据。

这让我想到了一个问题,为什么我首先需要冒充任何人?

这只是目录 API 的问题吗? 在他们的文档中,它指出

Note: Only users with access to the Admin APIs can access the Admin SDK Directory API, therefore your service account needs to impersonate one of those users to access the Admin SDK Directory API. 此外,用户必须至少登录一次并接受 Google Workspace 服务条款。

所以我的问题是:我是否能够以服务帐户的形式调用目录 API 而无需模拟用户? 如果没有,是否可以在不模拟用户的情况下将任何 API 调用作为服务帐户进行,或者这只是目录 API 问题?

与此问题相关:

为什么我首先需要冒充任何人?

服务帐户允许您进行身份验证并被授权访问 Google API 中的数据,如此所述,通过执行域范围委派,您授予服务帐户访问权限以通过模拟您的域中的用户来访问您的帐户数据。 您可以将服务帐户视为自动化授权的一种方式,因为它可以对多个 API 执行更改,而不仅仅是管理员 SDK 并避免让用户冒充每次都提供对给定 API 的访问权限。

您可以在不冒充用户的情况下调用 API,但这会导致访问服务帐户可用的数据,因为它是属于他们自己的数据,这意味着例如,如果您进行 Drive API 调用以使用服务帐户而不模拟它,可以创建文件,但它只属于服务帐户,您将无法以管理员身份访问该数据 由于服务帐户不同于您的域,因此数据将不属于您的域用户帐户,您可以在本文档中查看更多相关信息。

现在与关于模拟用户的最后一个问题有关,模拟是您代表用户进行 API 调用的一种方式,这样用户就不需要在每次需要执行更改时提供 API 访问权限,这适用于超级管理员用户和普通用户,这在文档中也有说明:

在企业应用程序中,您可能希望在没有任何手动授权的情况下以编程方式访问用户的数据。

与其将服务帐户和模拟视为问题,不如将其视为一种通过 API 对用户进行更改的方式,而无需他们授予您这样做的访问权限。 模拟允许您进行多项更改,并可以帮助您的组织在需要 API 调用时自动执行多项任务。

这取决于您使用的资源/方法,以及它需要的权限。

例如,您可以授予服务帐户组读者组管理员管理员角色,然后该服务帐户可以调用groups资源的方法。 不需要域范围的委派。

但这不适用于所有资源/方法,特别是它不适用于需要超级管理员权限的资源/方法。 要调用这些方法,您必须使用域范围的委派来模拟具有超级管理员权限的用户。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM