具有模拟的域范围委派

Posted

技术标签:

【中文标题】具有模拟的域范围委派【英文标题】:Domain-wide delegation with impersonation 【发布时间】:2022-01-10 21:59:13 【问题描述】:

我的场景涉及两个服务帐户,即 S1 和 S2。 S2 被授予对 Google Workspace 的全域访问权限。

我想让 S1 冒充 S2(已经在 S1 上拥有“服务帐户令牌创建者角色”)并使用其权限来使用 S2 的访问权限来检索有关 Google Workspace 的一些信息。

是否可以将权限委托给 S1?

编辑: Johannes Passing 解决方案成功了,但仍然感觉有点像解决方法,在 google-api-dotnet-client 上打开了一个问题以添加这样的功能。

【问题讨论】:

什么是 S1 S2?您是在谈论两个不同的服务帐户吗?只要在域帐户上创建了服务帐户凭据,您就可以设置委派。 @DaImTo - 更新了我希望它澄清问题的问题。 S1 和 S2 确实是两个不同的服务帐户,S1 对 S2 具有“服务帐户令牌创建者角色”权限,而 S2 对 Google Workspace 具有域范围的访问权限。 据我所知,必须对域上的用户执行委派。我认为您不能委托给另一个服务帐户。话虽如此,您是否尝试过发生了什么?你遇到了什么问题? 我能够使用 S2 并委托给用户。我还能够使用 S1 并模拟 S2。我无法将这两个步骤结合起来 - 1. S1 模拟 S2 2. 委托给用户 我没有亲自尝试过,但谷歌支持委托链。您必须在委派时同时指定三个帐户。 S1 -> S2 -> 用户。设置模拟时,您必须在委托链中指定 S2。换句话说,S1 通过在委托链中声明 S2 来模拟 User。 【参考方案1】:

Yes, that's possible 如果 S2 的客户端 ID 已为域范围委派配置:

    Create a JWT assertion 与: iss 设置为 S2 的电子邮件地址 sub 设置为 Workspace 用户的电子邮件地址 scope 设置为您为 S2 的客户端 ID 和域范围委派列入白名单的范围 作为 S1,在 S2 上调用 projects.serviceAccounts.signJwt 以使用 S2 的密钥对断言进行签名。结果,您将获得一个签名的 JWT 断言。为此,S1 必须在 S2 上具有 Service Account Token Creator 角色。 将断言发布到https://oauth2.googleapis.com/token。因此,您将获得 Workspace 用户的访问令牌。

【讨论】:

以上是关于具有模拟的域范围委派的主要内容,如果未能解决你的问题,请参考以下文章

通过“委派”过滤组策略设置

OWIN Cookie 身份验证 - 使用 Kerberos 委派模拟 SQL Server

代码覆盖范围内未考虑委派 Switch

使用委派的全域权限访问 gmail API

ASP.NET 4 中的双跳模拟、协议转换和约束委派

使用 Google 工作区委派服务帐户 - 找不到实体