一分耕耘,一分收获!既然都打开这篇《使用 golang 在 Google admin sdk api 上获取 400 invalid_grant。有什么建议么?》,就坚持看下去,学下去吧!本文主要会
一分耕耘,一分收获!既然都打开这篇《使用 golang 在 Google admin sdk api 上获取 400 invalid_grant。有什么建议么?》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!
问题内容我正在尝试编写一个 golang 脚本,该脚本使用我的服务帐户来管理我的 google 域。当我尝试执行简单的用户列表时出现错误:400 invalid_grant。看来我正确使用了我的服务帐户(?),并且我的服务帐户是超级管理员。我在java代码中使用凭据;所以我知道它是有效的。有什么想法吗?
package main
import (
    "fmt"
    "io/ioutil"
    "log"
    "golang.org/x/net/context"
    "golang.org/x/oauth2/google"
    directory "google.golang.org/api/admin/directory/v1"
)
func main() {
    serviceAccountFile := "/credentials.JSON"
    serviceAccountjsON, err := ioutil.ReadFile(serviceAccountFile)
    if err != nil {
        log.Fatalf("Could not read service account credentials file, %s => {%s}", serviceAccountFile, err)
    }
    config, err := google.JwtConfigFromJSON(serviceAccountJSON,
        directory.AdminDirectoryUserScope,
        directory.AdminDirectoryUserReadonlyScope,
    )
    // Add the service account.
    config.Email = "[email protected]"
    srv, err := directory.New(config.Client(context.Background()))
    if err != nil {
        log.Fatalf("Could not create directory service client => {%s}", err)
    }
    // The next step fails with:
    //2019/03/25 10:38:43 Unable to retrieve users in domain: Get https://www.googleapis.com/admin/directory/v1/users?alt=json&maxResults=10&orderBy=email&prettyPrint=false: oauth2: cannot fetch token: 400 Bad Request
    //Response: {
    //  "error": "invalid_grant",
    //  "error_description": "Robot is missing a project number."
    //}
    //exit status 1
    usersReport, err := srv.Users.List().MaxResults(10).OrderBy("email").Do()
    if err != nil {
        log.Fatalf("Unable to retrieve users in domain: %v", err)
    }
    if len(usersReport.Users) == 0 {
        fmt.Print("No users found.\n")
    } else {
        fmt.Print("Users:\n")
        for _, u := range usersReport.Users {
            fmt.Printf("%s (%s)\n", u.PrimaryEmail, u.Name.FullName)
        }
    }
}我成功了。看起来这可能是多种因素的结合。 dazwilkin,是的,当我切换服务帐户的传递方式时,我收到了 401 未经授权的错误。我做了以下更改。
这是我的脚本现在的样子:
package main
import (
    "fmt"
    "io/ioutil"
    "log"
    "golang.org/x/net/context"
    "golang.org/x/oauth2/google"
    directory "google.golang.org/api/admin/directory/v1"
)
func main() {
    serviceAccountFile := "/credentials.json"
    serviceAccountJSON, err := ioutil.ReadFile(serviceAccountFile)
    if err != nil {
        log.Fatalf("Could not read service account credentials file, %s => {%s}", serviceAccountFile, err)
    }
    // I want to use these options, but these cause a 401 unauthorized error
    //  config, err := google.JWTConfigFromJSON(serviceAccountJSON,
    //      directory.AdminDirectoryUserScope,
    //      directory.AdminDirectoryUserReadonlyScope,
    //  )
    config, err := google.JWTConfigFromJSON(serviceAccountJSON,
        directory.AdminDirectoryUserScope,
    )
    // Add the service account.
    //config.Email = "[email protected]" // Don't use Email, use Subject.
    config.Subject = "[email protected]"
    srv, err := directory.New(config.Client(context.Background()))
    if err != nil {
        log.Fatalf("Could not create directory service client => {%s}", err)
    }
    // Get the results.
    usersReport, err := srv.Users.List().Domain("domain.com").MaxResults(100).Do()
    if err != nil {
        log.Fatalf("Unable to retrieve users in domain: %v", err)
    }
    // Report results.
    if len(usersReport.Users) == 0 {
        fmt.Print("No users found.\n")
    } else {
        fmt.Print("Users:\n")
        for _, u := range usersReport.Users {
            fmt.Printf("%s (%s)\n", u.PrimaryEmail, u.Name.FullName)
        }
    }
}本篇关于《使用 golang 在 google admin sdk api 上获取 400 invalid_grant。有什么建议么?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注编程网公众号!
--结束END--
本文标题: 使用 golang 在 google admin sdk api 上获取 400 invalid_grant。有什么建议么?
本文链接: https://www.lsjlt.com/news/596875.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0