我正在尝试在使用Go的App Engine部署中使用具有域范围委派(DwD)的服务帐户。
我已按照使用Google Application Default Credentials使用App Engine的服务帐户的步骤进行操作。
我在我的开发机器上运行了本地代码,但我仍然坚持从我的域中检索实际数据。
我正在使用Admin SDK。在Delegate domain-wide authority to your service account部分下,它说我的“服务帐户需要冒充其中一个用户访问管理SDK目录API”。
我查看了Go使用服务帐户和用户模拟的文档,我也仔细阅读了源代码。它无处指示我可以输入用户的电子邮件地址/身份以进行冒充。
这是我得到的错误:
googleapi: Error 404: Domain not found., notFound
源代码确实显示了一些线索,但在尝试使用Application Default Credentials以外的其他内容时遇到了其他障碍。
有没有人有任何想法?提前谢谢。
答案 0 :(得分:0)
对于Admin SDK,我需要要求用户(管理员)访问Directory API的权限。这与其他API完全不同,我只是设置用户电子邮件地址来访问指定用户的数据。
我认为这是可以理解的,因为Admin SDK是一个功能更强大的API,影响域而不仅仅是个人用户。
答案 1 :(得分:0)
今天遇到同样的问题,但使用三管齐下的OAuth2并不可行,因为我们不想使用API更改目录,而是检查签名用户的组成员身份通过App Engine用户API。
这导致我创建了这个库:https://github.com/iamacarpet/go-gae-dwd-tokensource
它创建一个支持模拟的自定义JWT,使用内置功能使用默认服务帐户对其进行签名,然后将其触发到令牌端点以获取access_token。
它不像获取访问令牌的默认函数那样高效,但在我的测试中,对于组成员身份检查,它是~20ms延迟与~450ms,所以这不是问题。
我已经在GitHub页面上的negroni中间件中包含了一个使用它的示例。