【问题标题】:User Impersonation with Service Account using Application Default Credentials使用应用程序默认凭据对服务帐户进行用户模拟
【发布时间】:2017-10-19 13:08:31
【问题描述】:

我正在尝试在使用 Go 的 App Engine 部署中使用具有域范围委派 (DwD) 的服务帐户。

我已按照使用 Google Application Default Credentials 的步骤在 App Engine 中使用服务帐号。

我的代码在我的开发机器上本地运行,但我一直无法从我的域中检索实际数据。

我正在使用Admin SDK。在Delegate domain-wide authority to your service account 部分下,它说我的“服务帐户需要模拟其中一个用户才能访问 Admin SDK Directory API”。

我查看了有关使用服务帐户和用户模拟的 Go 文档,并且还仔细研究了源代码。它没有表明我可以在哪里输入用户的电子邮件地址/身份来模拟。

这是我得到的错误:

googleapi: Error 404: Domain not found., notFound

源代码确实显示了一些线索,但在尝试使用除应用程序默认凭据之外的其他东西时,我遇到了其他障碍。

有人知道吗?提前致谢。

【问题讨论】:

    标签: google-app-engine go google-oauth google-admin-sdk


    【解决方案1】:

    今天刚遇到同样的问题,但使用三管齐下的 OAuth2 并不可行,因为我们不想使用 API 更改目录,而是检查通过应用程序登录的用户的组成员身份引擎用户 API。

    这促使我创建了这个库:https://github.com/iamacarpet/go-gae-dwd-tokensource

    它创建一个支持模拟的自定义 JWT,使用内置功能使用默认服务帐户对其进行签名,然后将其触发到令牌端点以获取 access_token。

    获取访问令牌的效率不如默认函数,但在我的测试中,延迟约为 20 毫秒,而组成员资格检查约为 450 毫秒,所以这不是问题。

    我在 GitHub 页面上包含了一个在 negroni 中间件中使用它的示例。

    【讨论】:

      【解决方案2】:

      对于 Admin SDK,我似乎需要请求用户(管理员)访问 Directory API 的权限。这与其他 API 完全不同,我只是简单地设置用户电子邮件地址来访问指定用户的数据。

      我想这是可以理解的,因为 Admin SDK 是一个功能强大得多的 API,它影响域而不仅仅是单个用户。

      【讨论】:

        猜你喜欢
        • 2020-05-27
        • 2019-04-26
        • 2015-12-25
        • 2023-01-31
        • 2011-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多