【问题标题】: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。

标签: google-workspace google-api-dotnet-client service-accounts


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2019-08-15
    • 2017-01-04
    • 1970-01-01
    • 2018-04-11
    • 2020-12-24
    • 2018-06-20
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    相关资源
    最近更新 更多