2

Я пытаюсь сделать запрос против API администратора Google, чтобы указать всех пользователей в моей Службе Google Apps. У меня есть разрешения сделать этот запрос в web UI example и получить результаты, но это 403, когда я пытаюсь сделать запрос с учетной записью службы.API Google Apps 403 с учетной записью службы

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() { 
    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, 
    ) 

    client, err := directory.New(config.Client(context.Background())) 
    if err != nil { 
     log.Fatalf("Could not create directory service client => {%s}", err) 
    } 

    users, err := client.Users.List().ViewType(publicDataView).Domain(domain).Do() 
    if err != nil { 
     log.Fatalf("Failed to query all users => {%s}", err) 
    } 

    for _, u := range users.Users { 
     fmt.Println(u.Name.FullName) 
    } 
} 

Каждый раз, когда я исполняю я получаю 403. Те же параметры запроса работает в разделе hereTry it!, так что я не знаю, почему он терпит неудачу.

результат: Failed to query all users => {googleapi: Error 403: Not Authorized to access this resource/api, forbidden}

+1

Вы предоставили доступ к учетной записи службы? – DaImTo

+1

Вы должны предоставить свою учетную запись домена домена службы https://developers.google.com/drive/web/delegation. Выполните шаги, указанные в документации. – SGC

+0

Теперь я получил доступ к учетной записи службы и жду, пока это будет распространено. Спасибо за совет. –

ответ

2

Я знаю, что этот вопрос год назад, но я не смог найти ничего об этом везде - но ив только что удалось исправить после запуска в ту же ошибку, что и вы.

в основном вам нужно установить пользователю делегирование в вашей конфигурации, например:

func main() { 
    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 me 
    config.Subject = "[email protected]" 

    client, err := directory.New(config.Client(context.Background())) 
    if err != nil { 
     log.Fatalf("Could not create directory service client => {%s}", err) 
    } 

    users, err := client.Users.List().ViewType(publicDataView).Domain(domain).Do() 
    if err != nil { 
     log.Fatalf("Failed to query all users => {%s}", err) 
    } 

    for _, u := range users.Users { 
     fmt.Println(u.Name.FullName) 
    } 
} 

См https://github.com/golang/oauth2/blob/master/google/example_test.go#L118

надеюсь, что это помогает кто-то другой!

Смежные вопросы