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



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

我需要访问我的应用程序上的工作区管理SDK API中的一些信息(例如列出chromeos设备(,而无需提示用户登录。我认为最好的方法是使用服务帐户来完成这项工作,这样我就可以将我的服务帐户的详细信息上传到应用程序,每次我需要一些数据时,它都会通过此帐户来完成。

我已经在GCP中创建了我的服务帐户,然后在谷歌工作区中为其提供了所需范围的域名授权。

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

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

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

注意:只有能够访问Admin API的用户才能访问Admin SDK Directory API,因此您的服务帐户需要模拟其中一个用户才能访问Admin-SDK Directory API。此外,用户必须至少登录一次并接受谷歌工作区服务条款。

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

与此问题相关:

为什么我首先需要模拟任何人?

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

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

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

在企业应用程序中,您可能希望以编程方式访问用户的数据,而无需用户进行任何手动授权。

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

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

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

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

最新更新