如何修复在Go中访问Google API admin/目录时出现的400错误?

dgiusagp  于 2023-06-03  发布在  Go
关注(0)|答案(1)|浏览(220)

Go访问Google API admin/目录时出现400错误

我有一个项目,所有用户都有一个通过G-Suit集中管理的Google帐户。现在,我需要在我的后端中提供所有G-Suit用户,以便即使他们从未登录到我的工具,也可以搜索用户。因此,我认为后端最好通过服务帐户连接到Google,以便从API加载用户。
对于身份验证,我从google cloud控制台为一个服务帐户生成了一个密钥对(带有所有者权限以供测试),将其保存为json并将其传递给应用程序。之后,我使用返回的服务启动API调用,该调用应该返回用户,不幸的是,它只返回400错误。
我已经试着缩小问题的范围,就我从调试器中看到的,头部缺少一个承载令牌,否则我没有看到任何其他不寻常的东西,所以我假设这是一个身份验证问题,但它也可能是一个完全不同的问题。
下面是我的代码:

import (
    "context"
    admin "google.golang.org/api/admin/directory/v1"
    "google.golang.org/api/option"
    "log"
)

func Test() error {

    ctx := context.Background()
    adminService, err := admin.NewService(ctx, option.WithCredentialsFile("./client-secret.json"))

    if err != nil {
        return err
    }

    res, err := adminService.Users.List().Customer("my_customer").Projection("full").MaxResults(500).Do()
    if err != nil {
        return err
    }

    log.Printf("Result: %v\n", res)

    for _, u := range res.Users {
        println(u.PrimaryEmail)
    }

    return nil
}

这是生成的日志消息googleapi: Error 400: Invalid Input, invalid
我试图从Google API加载我组织中的所有用户,不幸的是,每次我尝试时都会出现400错误,我不太明白为什么我使用Google API库。

wljmcqd8

wljmcqd81#

建议

*:这是作为您的项目的起点或参考。需要注意的是,社区成员不提供编码服务。

我不是Golang的Maven,但在大多数编程语言中,使用Google API和服务帐户的概念是相似的。以下是在服务帐户中使用Google API时需要遵循的一些步骤:
1.为您的服务帐户设置全域委派。
1.配置凭据时,请使用subject参数指定服务帐户应模拟的超级管理员电子邮件地址。这可确保服务帐户具有执行所需操作的必要权限。您可以参考this related Golang reference更多关于配置subject参数的信息。

* 演示如下:*

我这边用 Python 测试了***Admin SDK API***,遇到了一个400 error

为了解决这个问题,我确保正确设置了Domain-Wide Delegation,并在创建服务帐户凭据时指定了subject参数。完成此操作后,我可以顺利使用Admin SDK API

我希望这将有助于您在当前项目中取得进展。

相关问题