当前位置: 首页 > 面试题库 >

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

拓拔玺
2023-03-14
问题内容

我们在使用服务帐户访问代理商API时遇到问题。具有客户机密的示例运行良好,但是我们需要将其部署在k8s(Kubernetes
Engine)中,而无需定期刷新oauth会话(尤其是执行一次,因为在docker容器中有点难)。

尽管有很多关于如何使用python进行操作的文档,但我们找不到使用服务帐户进行访问的任何方法。

我们尝试了两个帐户,一个为默认计算引擎,一个为我们的用例直接创建。两者都在G Suite中获得了经销商范围。

    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上的一篇文章中读到,Reseller
API需要用户模拟,但是在整个Google上进行搜索以及使用oauth2和客户端库库都无法找到实现此目的的方法。Python就像端对端教程中所述

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

但是对于Go,我找不到任何记录的方式来执行此操作。


问题答案:

通过使用其他配置解决了问题,然后设置了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)
}


 类似资料:
  • 是否可以使用服务帐户访问Google Admin Report SDK? 我有一个非常基本的例子,我正在尝试运行,我总是得到一个400错误返回。我已经验证了密钥和服务ID是正确的,我甚至已经将权限委托给这个服务帐户。难道这就是不可能吗?有人有什么想法吗? 返回的错误如下: {“代码”:401,“错误”:[{“domain”:“global”,“location”:“authorization”,“

  • 我正在尝试使用Google Directory API验证组成员,但每次我发出请求时都无法通过403错误。 我使用的是一个服务帐户,我为它启用了“启用G套件域范围委托”选项。我还使用套件中的客户端ID添加了“https://www.googleapis.com/auth/admin.directory.user,https://www.googleapis.com/auth/admin.direc

  • 我正在尝试使用谷歌api从gmail账户获取新邮件。然而,阅读文档时,我发现有两种类型可以访问api:第一种是未经授权(使用json凭据),第二种是服务帐户(使用p12证书和secretkey) 无法理解这两者之间的区别是什么?我到底应该用什么? 谢谢

  • 我们正在尝试创建一个与谷歌管理SDK的集成,以便能够检索,更新和创建帐户在我们的领域。但是,我们不断收到一个403错误,表明我们没有被授权访问Resource/API。 我们正在使用从一个服务帐户获得的凭据,该帐户启用了域范围的授权,并且具有以下两个作用域:https://www.googleapis.com/auth/admin.directory.user.readonly,https://w

  • 我正在尝试通过服务帐户(客户端电子邮件和p12证书)连接到google doubeclick api,使用python客户端库,如以下示例所示: http://code.google.com/p/google-api-python-client/source/browse/samples/service_account/tasks.py 它给我一个空access_token: 这有什么意义?我有没

  • 问题内容: 我正在尝试访问Googles Contacts API,但由于获得授权而失败。从其他(网络)语言开始,我习惯于使用API​​Console和公共API密钥(授权)。 这样,我不能够刷新令牌并不能确定如何使用公共密钥的accessToken ......相反,我尝试了一个服务帐户: 这是我的例外: 谢谢提示! 问题答案: 不调用我的代码就可以很好地工作。但是您只会拥有一个模拟帐户(ser