使用服务帐户访问Google转售商API



我们在使用服务帐户访问转售商API方面存在问题。客户秘密的示例效果很好,但是我们需要在K8S(Kubernetes Engine(中部署此示例,而无需经常刷新OAuth会话(尤其是一次这样做,因为在Docker容器中有点困难(。

虽然有很多关于如何使用Python进行此操作的文档,但我们找不到使用服务帐户获得访问的任何方法。

我们尝试了两个帐户,即默认计算引擎一个,一个直接为我们的用例创建的帐户。

都有经销商范围。
    https://www.googleapis.com/auth/apps.order,
    https://www.googleapis.com/auth/admin.directory.user,
    https://www.googleapis.com/auth/siteverification,

使用

时,我们会继续遇到"googleapi: Error 403: Authenticated user is not authorized to perform this action., insufficientPermissions"错误
    client, err = google.DefaultClient(ctx, reseller.AppsOrderScope)
    if err != nil {
        log.Fatal("creating oauth client failed", zap.Error(err))
    }
    subs, err := client.Subscriptions.List().Do()
    if err != nil {
        log.Fatal("listing subscriptions failed", zap.Error(err))
    }

我在Stackoverflow上阅读了一篇文章,转销商API需要用户模仿,但是在Google和OAuth2和客户端LIB Repos中搜索此内容并没有以某种方式做到这一点。Python这样做了,就像端到端教程中所述的那样

    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        JSON_PRIVATE_KEY_FILE, 
    OAUTH2_SCOPES).create_delegated(RESELLER_ADMIN_USER)

但是,我找不到任何记录的方法。

这一点很少:

  • 转销商API仅在使用服务帐户时需要模仿/域范围内的委托。换句话说,服务帐户本身无权直接致电API,但它确实有能力(例如,admin@resseller.example.com等(,他们有权致电转销商API。li>
  • 您可以使用常规的3腿OAuth而不是服务帐户。您只需要确保请求离线访问,以便获得长期以来寿命的刷新令牌。
  • 模仿/域范围内委托与默认服务帐户与附录和Computeengine内置不兼容。您必须使用您在API项目中创建的服务帐户。

看看Google提供的样本是否可以让您获得您需要的地方。

通过使用其他配置解决了问题,然后设置JWT.Subject,显然是模仿的:

const envVar = "GOOGLE_APPLICATION_CREDENTIALS"
if filename := os.Getenv(envVar); filename != "" {
    serviceAccount, err := ioutil.ReadFile(filename)
    if err != nil {
        log.Fatal("creating oauth client failed", zap.Error(err))
    }
    config, err := google.JWTConfigFromJSON(serviceAccount,
        reseller.AppsOrderScope,
    )
    config.Subject = *impersonationUser // like user@google.com
    client = config.Client(ctx)
}

相关内容

  • 没有找到相关文章