当前位置: 首页 > 知识库问答 >
问题:

谷歌服务帐户:委托域范围的授权,只模拟一个用户

白高超
2023-03-14

我们需要访问谷歌日历API与服务器应用程序,以创建事件和邀请与会者。谷歌建议使用服务帐户的应用程序。

这里的主要问题是与会者邀请参加活动,因为如果没有域范围的授权,服务帐户就不能这样做(请参见img)。

组织不希望授予服务帐户访问所有用户数据的权限。所以,我想知道我们是否可以将域范围的授权委托给域的一个用户?(限制访问以使用其他用户的数据)。

附言。它只是关于谷歌日历API。

非常感谢你的帮助。

共有1个答案

丁沛
2023-03-14

我仍然不确定这个问题是否与编程相关,但是,如果您只想“在代码中”查看如何委托给用户,这里有一个使用C#的示例,其中gsuiteUser被添加到初始化ServiceAccountCredential的代码中。

在运行时,此代码将像GSuiteUser正在运行代码一样运行。对于该用户在gsuite域上拥有的任何访问权限,服务帐户都将拥有。没有办法再限制这种访问了。服务帐户是虚拟用户,他们可以被预先授权拥有用户的访问权。

string ApplicationName = "Calendar API .NET Quickstart";
            const string serviceAccount = "xxx@xxxxx-api.iam.gserviceaccount.com";

            var certificate = new X509Certificate2("cred.p12", "notasecret", X509KeyStorageFlags.Exportable);

            var gsuiteUser = "user@mygsuitedomain.com";

            var serviceAccountCredentialInitializer = new ServiceAccountCredential.Initializer(serviceAccount)
            {
                User = gsuiteUser,   // Service account will run as this user
                Scopes = new[] { CalendarService.Scope.read }

            }.FromCertificate(certificate);

            var credential = new ServiceAccountCredential(serviceAccountCredentialInitializer);
            if (!credential.RequestAccessTokenAsync(CancellationToken.None).Result)
                throw new InvalidOperationException("Access token failed.");

            var service = new CalendarService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });
 类似资料:
  • 我目前使用的谷歌服务帐户启用了域范围的委托(我使用了这个链接https://developers.Google.com/identity/protocols/oauth2/service-account,和这个链接https://developers.Google.com/admin-sdk/reports/v1/guides/developy),并且启用了“https://www.googlea

  • 我在我的Google Apps域上创建了一个服务号,启用了域范围的委托,并在服务号的客户端ID上从我的域的控制面板启用了完整的gmail和pubsub API范围。 我可以成功实例化gmail API客户端,并通过以下方式模拟域的一个帐户: 我正在尝试使用以下命令在模拟用户的帐户上设置推送通知webhook。指定的主题名称有效。 在呼叫观看后,我收到以下错误: 调用其他gmail API方法(列表

  • 我想使用Google服务帐户JWT令牌获取Azure服务主体(SP)的临时凭据。这是从GKE工作负载调用Azure API所必需的,而无需在GKE中存储长期SP凭据。 这样的联盟对GCP来说可能吗- [1]https://cloud.google.com/iam/docs/workload-identity-federation [2] https://docs.aws.amazon.com/IA

  • 1,有效,2不可行。 返回的错误是“刷新OAuth2令牌时出错,消息:”{“error”:“unauthorized_client”,“error_description”:“请求中未授权的客户端或作用域。”}“ 所有3个帐户都在开发人员控制台中注册。所有3个都被授权在谷歌应用程序控制台内进行“托管客户端API访问”。所有3个都有作用域“https://www.googleapis.com/aut

  • 我想使用谷歌驱动器作为一个网站的准CMS工作,我正在使内容所有者可以编辑他们的内容使用谷歌驱动器。我希望使用一个可以访问Google Drive的特定用户帐户(在写这篇文章时,服务帐户不能直接访问Google Drive),并且能够与内容所有者共享文档。 在阅读了API和教程之后,我在委托中找到了答案:https://developers.google.com/drive/development

  • 为了访问GMail API(并将呼叫拟人化),我使用了一个服务帐户(从谷歌云平台创建)。我的json文件看起来像这样 我还使用oAuth2client库使其更容易,但我找不到创建凭据然后指定范围和委托帐户的方法。 我试过了 但是我得到了一个错误,因为它需要一个PKCS-8密钥。 我该怎么做?(如果有帮助,我的代码在应用程序引擎 Flex 上运行) 谢啦