【问题标题】:Why does a service account with delegated domain access still need impersonation?为什么具有委派域访问权限的服务帐户仍需要模拟?
【发布时间】:2014-02-13 02:39:32
【问题描述】:

我正在考虑使用 OAuth 2.0 service accounts 和 domain-wide delegation of authority 将我们的服务与 Google Apps 集成。一个特定的用例是:

  • 当 Google Apps 客户注册我们的服务时,利用客户现有的组织结构或资源(组织单位、组、设备、用户、文件夹、文件等)预先提供我们的服务。

  • 当客户的 Google Apps 资源发生变化时,将适用的更改同步到我们的服务。

我发现在使用服务帐号时,我需要为我正在查询的域指定授权超级用户的电子邮件地址,如下所示:

var cred = new ServiceAccountCredential( new ServiceAccountCredential.Initializer( "{SERVICEACCOUNTEMAIL}" )
  {
     Scopes = new[]
              {
                 DirectoryService.Scope.AdminDirectoryOrgunitReadonly
              },
     User = "{USERTOIMPERSONATE@customergadomain.com}"
  }.FromCertificate( x509cert ) );

如果我想,例如

  1. 查询域中的所有组织单位或组
  2. 查询组织拥有的所有文件夹,或特定用户的文件夹

理想情况下,我不希望将我们服务器上的自动后台进程与特定的 Google Apps 用户结合起来,以使资源与域管理员或用户可能在 Google Apps 方面发生的更改保持同步。

我不想指定用户。所以我的主要问题是,我是否使用正确的授权模型来执行我正在尝试做的事情?

我的第二个问题更多的是旁白。当委派已授予对域资源的访问权限时,要求模拟以使用管理 API 的目的是什么?与正常的 OAuth 2.0 授权工作流程相比,我不必代表用户授权,我只需指定她的电子邮件地址。我是否缺少服务帐户/委托访问模型的意图?

【问题讨论】:

  • 好问题 +1 这也让我感到困惑,我已经完成了域范围的委派,但最终我发送了所有以域管理员身份验证的请求......

标签: google-oauth google-admin-sdk google-directory-api


【解决方案1】:

域范围的委派模型允许服务帐户模拟用户,从而在域中获得与授予应用程序的用户身份和范围集所暗示的相同的权限。

对于您调用的 API,只有域管理员可以访问这些 API。凭借您被授予的范围 + 模拟此类管理员的能力,您可以访问这些 API。

如果任务是访问管理员拥有的单个资源(例如组织的日历),则管理员可以与服务帐号共享该资源,然后服务帐号可能会冒充自己访问该资源。但是,对于代表许多资源集合的整个 API,使用 ACL 是不可行的,唯一可行的方法是授予服务帐户直接模拟特定 API 管理员的能力。

【讨论】:

  • 谢谢布雷诺。我想我理解为什么 ACL 在许多资源集合中是不切实际的。我认为我的问题的核心是,如果服务帐户的性质是充当管理员,为什么我们必须明确冒充一个?
  • ACL 实施基于用户帐户,而不是角色。管理员可以对不同的资源集拥有特权。例如,如果您域中的普通用户与管理员帐户 #1 共享文档,那么服务帐户会冒充 adm。帐户 #2 将无权访问该文档。
  • 在相关说明中,我发现我需要让域管理员转到其域的管理面板 > 安全 > '管理 API 客户端访问' 并添加我的服务帐户请求的范围为了使服务帐户能够成功模拟管理员。你们是不是也遇到了这个问题,还是能够自动化这一步?
  • 我想知道“......在域中获得与用户身份+授予应用程序的范围集所暗示的相同的权限......”这是否意味着应用程序冒充一个超级管理员实际上不受其范围的限制?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2012-02-27
  • 1970-01-01
  • 2020-04-02
  • 2022-01-10
  • 1970-01-01
相关资源
最近更新 更多